Làm ứng dụng học toán đơn giản với React Native - Phần 2

03.02.2021

0/5 (0 Reviews)

Cùng học tiếp hướng dẫn lập trinh game học toán cơ bản đơn giản bằng React Native bài 2. Học React Native cùng LPTech để cùng lập trình ra những ứng dụng hay.

    1. Cài đặt

    Trong bài viết này, có 2 điều mình sẽ thêm vào app, cũng như giúp các bạn tiếp tục làm quen với những thứ cơ bản nhất trong React Native, đó là @react-navigation/nativemobx, trong đó @react-navigation/native dùng để chuyển qua lại giữa các màn hình, còn mobx dùng để quản lý state (đối với những bạn mới thì mobx là lựa chọn không tệ để bắt đầu học về cách quản lý state)

    Docs của 2 em nó mobx : ,

    2. Native

    Chúng ta sẽ chỉnh lại 1 số file và tạo thêm 1 số file mới, đầu tiên là App.js,

    import 'react-native-gesture-handler';
    import * as React from 'react';
    import { NavigationContainer } from '@react-navigation/native';
    
    import WelcomeStack from './src/navigation/welcomeStack';
    
    export default function App() {
      return (
        <NavigationContainer>
          <WelcomeStack />
        </NavigationContainer>
      );
    }
    

    ở đây mình có tạo ra 1 Stack Welcome, mục đích là để chứa 3 màn hình con khác, bao gồm welcome, practice và failed

    WelcomeStack.js đây :v

    import React from 'react';
    import Practice from '../screen/practice';
    import Failed from '../screen/failed';
    import WelcomeScreen from '../screen/welcome';
    import { StackRoute } from '../constants/route';
    import { createStackNavigator } from '@react-navigation/stack';
    
    const Stack = createStackNavigator();
    
    const WelcomeStack = () => {
      return (
        <Stack.Navigator initialRouteName={StackRoute.Main.Welcome}>
          <Stack.Screen
            name={StackRoute.Main.Welcome}
            component={WelcomeScreen}
            options={{ headerShown: false }}
            backBehavior="none"
          />
          <Stack.Screen
            name={StackRoute.Main.Practice}
            component={Practice}
            options={{ headerShown: false }}
          />
          <Stack.Screen
            name={StackRoute.Main.Failed}
            component={Failed}
            options={{ headerShown: false }}
          />
        </Stack.Navigator>
      );
    };
    
    export default WelcomeStack;
    

    Vì để cho tiện việc phát triển sau này, nên tên của các màn hình, hay Stack, mình đều thông báo vào 1 file chung là route.js như trên, các bạn cũng nên có 1 bố cục sắp xếp folder và file hợp lý để sau này lỡ dự án có phình to ra thì cũng không cần phải sắp xếp lại. Các bạn có thể tham khảo qua file route.js của mình:

    export const StackRoute = {
      Main: {
        Welcome: 'Welcome',
        Practice: 'Practice',
        Failed: 'Failed',
      },
    };
    

    Tiếp theo là 3 file lần lượt là welcome.js, practice.js, failed.js

    // welcome.js
    import React, { useRef, useEffect } from 'react';
    import {
      >

    À ngoài ra trong lần update này, mình còn áp dụng React native animation cơ bản nữa, nhưng vì đó 1 chủ đề khá là thú vị và hay ho, xứng đáng có 1 bài viết riêng, mình sẽ không viết nó ở đây 

    // practice.js
    import { observer } from 'mobx-react';
    import 'mobx-react-lite/batchingForReactNative';
    import React, { useState, useEffect } from 'react';
    import {
      >

    Trong file này, nếu bạn chú ý đọc 1 tí ( nếu không đọc cũng không sao, chỉ là sẽ lỗi tí khi chạy thôi mà ) sẽ thấy mobxPracticeStore đã được thêm vào, mình sẽ nói về nó ở phần tiếp theo.

    // failed.js
    import React, { useRef, useEffect } from 'react';
    import {
      >

    Lưu ý: Nếu trong lúc copy paste, bạn có phát hiện cái library nào lạ lạ thì cái giúp mình với nhé :3

    Trong 3 file trên, ngoại trừ phần animationmobx thì chỉ là update UI cho app thêm đep và tạo cảm giác gần gũi hơn với người dùng thôi. Nên mình sẽ không giải thích nhiều về 3 file này

    3. Mobx

    mobx nếu bạn đã từng làm qua redux thì mục đích của nó cũng là để quản lý state trong store 1 cách hiệu quả. Cùng lướt qua file PracticeStore.js tí nhé

    import { observable, action, computed, decorate } from 'mobx';
    
    class PracticeStore {
      firstParameter = 0;
      secondParameter = 0;
      isCorrect = true;
      point = 0;
    
      setFirstParameter(item) {
        this.firstParameter = item;
      }
      setSecondParameter(item) {
        this.secondParameter = item;
      }
    
      setPoint(item) {
        this.point = item;
      }
    
      get FirstParameter() {
        return this.firstParameter;
      }
      get SecondParameter() {
        return this.secondParameter;
      }
    
      get IsCorrect() {
        return this.isCorrect;
      }
    
      get Point() {
        return this.point;
      }
    
      randomNumber = (to, from) => {
        return Math.floor(Math.random() * from) + to;
      };
    
      calculateResult = () => {
        const isTrue = Math.floor(Math.random() * 4);
        if (isTrue === 0) {
          return this.firstParameter + this.secondParameter;
        }
        const isBigger = Math.floor(Math.random() * 4);
        let resultFalse = 0;
        if (isBigger === 0) {
          resultFalse =
            this.firstParameter +
            this.secondParameter +
            Math.floor(Math.random() * 2);
        } else {
          resultFalse =
            this.firstParameter +
            this.secondParameter -
            Math.floor(Math.random() * 2);
        }
        return resultFalse < 0 ? 0 : resultFalse;
      };
    }
    
    decorate(PracticeStore, {
      firstParameter: observable,
      secondParameter: observable,
      isCorrect: observable,
      point: observable,
      FirstParameter: computed,
      SecondParameter: computed,
      IsCorrect: computed,
      Point: computed,
      setFirstParameter: action,
      setSecondParameter: action,
      setPoint: action,
    });
    
    const practiceStore = new PracticeStore();
    export default practiceStore;
    

    Nếu đọc kỹ, các bạn sẽ thấy các biến được decorate với từ khóa là observable, như vậy nghĩa là sao ? Có thể nói observable giống với state trong React, khi biến được decorate bởi observable thay đổi giá trị, nó sẽ khiến Component có sử dụng chúng được re-render, với điều kiện Component đó phải được bọc bởi observer như thế này export default observer(Component). Với những function để lấy dữ liệu, sẽ được decorate là computed, và các function tác động và xử lý đến các biến observable sẽ được decorate là action. Nghe thật đơn giản phải không nào? Nếu bạn đã dùng qua Redux thì bạn sẽ thấy mobx gọn nhẹ như thế nào, hoặc nếu chưa đọc thì đọc qua bài so sánh của mình đã viết trước đây nhé, link đây :v

    Bạn có thể đọc thêm thông tin về mobx trong trang chủ của nó.

    4) Kết thúc

    Vậy là chúng ta đã update xong cho ứng dụng học toán rồi, giờ hãy xem thử hình dạng của nó nào.

    Khi mới vào này

    Bấm vào nút play

    Thắng được 2 câu và lên được 2 điểm )

    Tới câu thứ 3 thì oẳng mất tiêu

    so với version 1 thì nó đã đẹp hơn nhiều phải không nào, nếu bạn đã quên thì có thể xem ở đây.

    Bài viết trên do 1 bạn chia sẻ trên internet, chúng tôi tổng hợp và trích soạn. Cảm ơn bạn đã có những bài viết hay cho cộng cồng.

    CÓ THỂ BẠN QUAN TÂM

    Bài Viết Cùng Chuyên Mục

    XEM THÊM
    thumbnail

    LPStack Server: Giải pháp thay thế XAMPP và MAMP năm 2026

    10.03.2026

    Bạn đã chán ngấy XAMPP hay MAMP chậm chạp? Khám phá LPStack Server – Môi trường Local Development siêu nhẹ của người Việt với Auto Vhost, Public Tunnel, chuyển đổi PHP 1-click và quản lý Database Native chuyên nghiệp

    thumbnail

    Global Entreprep Incubator 2025: Cùng mang Start up của bạn ra thế giới cùng VinUni

    11.08.2025

    Chương trình Vườn ươm Khởi nghiệp Toàn cầu VinUni 2025 (GE25) được định vị là một chương trình tăng tốc chuyên sâu kéo dài 12 tuần, được thiết kế đặc biệt cho các startup công nghệ

    thumbnail

    Hướng Dẫn Tạo Trò Chơi Cờ Caro Nâng Cao bằng HTML

    19.03.2025

    Chào các bạn! Trong bài viết này, chúng ta sẽ cùng nhau xây dựng một trò chơi Cờ Caro đơn giản nhưng có nhiều tính năng thú vị như giới hạn nước đi, pháo hoa khi chiến thắng, chọn chế độ chơi và đếm thời gian.

    thumbnail

    Grok AI: Giới thiệu chi tiết về chatbot của Elon Musk

    04.03.2025

    Grok là một chatbot AI tiên tiến, được phát triển bởi xAI, công ty do Elon Musk sáng lập. Ra mắt lần đầu vào tháng 11/2023, Grok được thiết kế để cạnh tranh với các mô hình AI nổi tiếng như ChatGPT

    thumbnail

    Hướng dẫn xoá Google Analytics Universal mới nhất

    10.07.2024

    Một số người dùng đang gặp vấn đề khi muốn xoá tài khoản Google Analytics Universal ra khỏi GA của mình nhưng không xoá được, đây là hướng dẫn dành cho bạn