Redux là một thư viện quản lý vùng chứa trạng thái, cho phép truy cập tương tác dễ dàng trong react. Redux tạo ra một vùng store riêng để lưu trữ dữ liệu. Khi muốn đọc ghi dữ liệu từ một component bất kỳ thì dễ dàng truy cập thông qua redux. Nếu không dùng redux thì bạn phải thao tác qua việc truyền dữ liệu từ các props của component. Nếu các component ở xa nhau thì sẽ khó khăn truy cập được dữ liệu của các component.

 

https://redux.js.org/introduction/getting-started

Cài đặt thư viện:

npm install @reduxjs/toolkit
npm install redux
npm  install react-redux

Tạo cấu trúc thư mục:

src/
	redux/
		reducers/
		store/
	screens/
		TodoScreen

Bước 1: Tạo reducer

Trong thư mục reducer, tạo một file là todoReducer.js

import { createSlice } from "@reduxjs/toolkit";
//1. khai báo khởi tạo state
const initialState = {
    listTodo :[] // chứa danh sách công việc
}
//2. thiết lập cho reducer và định nghĩa các action
const todoSlice = createSlice({
    name : 'todo',
    initialState,
    reducers:{
        addTodo (state, action){
            state.listTodo.push( action.payload );
        },
          // có thêm action nào khác thì viết vào đây
       
        
    }
});
// export các thành phần để bên screen có thể sử dụng
export const {addTodo} = todoSlice.actions;
export default todoSlice.reducer;

Bước 2: Tạo store

Trong thư mục store, tạo một file là index.js

 

import { configureStore } from "@reduxjs/toolkit";
import todoReducer from "../reducers/todoReducer";
export default configureStore({
    reducer: {
        listTodo: todoReducer
    }
});

Bước 3: Tạo giao diện trong thư mục screen

Tạo một file là TodoScreen.js để thiết lập về giao diện hiển thị

 

import { useDispatch, useSelector } from "react-redux";
import { addTodo, deleteTodo, updateTodo,toggleTodoStatus } from "../redux/reducers/todoReducer";
import { Button, Text, TextInput, TouchableOpacity, View } from "react-native";
import { useState } from "react";
const TodoScreen  =()=>{
    //1. Khai báo các state để thực hiện thêm
    const [title, setTitle] = useState('');
   
    //lấy  danh sách dữ liệu
    const  listTodo =  useSelector(state=>state.listTodo.listTodo);
    // chú ý: state.listTodo.listTodo  thì state.listTodo là cái ở trong store, còn listTodo cuối cùng là cái trong reducer
    // lấy đối tượng để điều khiển các action
    const dispatch = useDispatch();// của redux
    // hàm xử lý việc thêm
    const handleAddTodo = ()=>{
        let duLieuThem = { id: Math.random().toString(), title: title };
        dispatch( addTodo ( duLieuThem )  );
    }
     
    return (
         // nội dung return bạn xem bên dưới
    );
}
export default TodoScreen;

 

Code của phần return

return (
  <View>
    <TextInput
      placeholder="Nhập tên việc"
      onChangeText={setTitle}
    />
    <View style={{ width: 100 }}>
      <Button title="Thêm" onPress={handleAddTodo} />
    </View>
    {/* Hiện danh sách: */}
    {
      listTodo.map(row => (
        <View
          key={row.id}
          style={{
            padding: 10,
            margin: 10,
            backgroundColor: 'cyan',
          }}
        >
          <Text>
            {row.title} === {row.id}
          </Text>
        </View>
      ))
    }
  </View>
);

export default TodoScreen;

 

Bước 4: Khai báo trên file App.tsx

import React from 'react'
import { Provider } from 'react-redux'
import store from './src/redux/store'
import TodoScreen from './src/screens/TodoScreen'
const App = () => {
 return (
    <Provider store={store}>
     <TodoScreen />
    </Provider>
 )
}
export default App

Chạy ứng dụng để thử nghiệm chức năng thêm và hiển thị danh sách.