Thông thường chúng ta sẽ dùng một nhà kho để chứa dữ liệu state
như Redux, một component container bọc ở nút đầu tiên trong app, các component con bên trong có thể truy xuất và cập nhập các dữ liệu một cách dễ dàng
Với các API mới được React bổ sung là useState
, createContext
, useContext
chúng ta có thêm một lựa chọn để làm nhà kho mà ko cần dùng đến Redux
Ví dụ chúng ta có 3 dữ liệu như bên dưới
const teamMembersNames = ["John", "Mary", "Jason", "David"];
const [sharing, setSharing] = React.useState([]);
const [help, setHelp] = React.useState([]);
const [pairing, setPairing] = React.useState(teamMembersNames);
Câu hỏi là làm sao chúng ta đưa dữ liệu vào nhà kho. Chúng ta sẽ dùng API createContext
(tạo em cái kho)
Khi sử dụng React.createContext
chúng ta sẽ nhận về 2 component là Provider
(anh tung) và Consumer
(em hứng).
Để các component bên trong <App/>
đều dùng được <Consumer />
Với bất kỳ component nào muốn sử dụng, để lấy được dữ liệu trong store, chúng ta sử dụng useContext
import React from "react";
import { StoreContext } from "../utils/store";
const SomeComponent = () => {
// dữ liệu dùng chung
const { sharing } = React.useContext(StoreContext);
};
Hoặc nếu thích dùng cách viết render props, có thể dùng luôn component <Consumer/>
<StoreContext.Consumer>
{store => <InputComponent store={store} />}
</StoreContext.Consumer>
Ứng dụng làm useAuth
Một trong những ví dụ dễ thấy, phần dữ liệu nên đưa vào nhà kho chung là phần thông tin user đang đăng nhập
Chúng ta sẽ cần 3 phần
- Khai báo một nhà kho bằng
createContext
- Bộ
reducer
làm nhiệm vụ cập nhập xử lýstate
- Một hook tùy biến
useAuth
cung cấp các API cần thiết để tương tác với nhà kho chung đã khai báo - AuthProvider.js Khai báo nhà kho (bản rút gọn)
- authReducer.js (bản rút gọn)
- Một hook tùy biến
useAuth
Với cách làm này, bất kỳ component nào sử dụng useAuth
đều sẽ truy xuất đến một kho dữ liệu chung
import useAuth from "useAuth";
const MyCom = () => {
const {
/* quá trời thứ linh tinh trả về */
} = useAuth();
//...
};
TopDev via Vuilaptrinh