Redux là một thư viện JavaScript quản lý trạng thái (state) phổ biến, thường được sử dụng trong các ứng dụng React. Redux giúp kiểm soát trạng thái ứng dụng một cách hiệu quả và dễ dự đoán, nhất là khi ứng dụng có nhiều thành phần và tương tác phức tạp. Dưới đây là các khái niệm cơ bản về Redux:
type (xác định loại hành động) và có thể có các thuộc tính bổ sung cho dữ liệu.state hiện tại và action, sau đó trả về trạng thái mới.dispatch(action), Redux sẽ chuyển action đó đến reducer để cập nhật trạng thái. - là cái có sẵn chỉ cần gọi ra const dispatch = useDispatch();
dispatch(fetchTaskRequest());CÁC BƯỚC SETUP TRONG PROJECT: BƯỚC 1: TẠO CÁC THƯ MỤC:
BƯỚC 2: TẠO FILE PROVIDER Ở THƯ MỤC SRC ĐỂ BỌC FILE return <Provider store={store}>{children}</Provider> (children là nơi chưa ứng dụng)
BƯỚC 3: SỬ DỤNG useSelector để lấy State và useDispatch để thực hiện 1 action mục đích chung để update Sate : const { tasks, loading, error } = useSelector(state => state.task);

Redux thích hợp nhất cho các ứng dụng có nhiều trạng thái và yêu cầu quản lý phức tạp. Đối với các ứng dụng nhỏ hoặc ít tương tác, Redux có thể không cần thiết.
Luồng hoạt động của Redux có thể được mô tả qua bốn bước chính, giúp xử lý và quản lý trạng thái một cách rõ ràng và có tổ chức. Dưới đây là luồng hoạt động cơ bản của Redux:
Một action là một đối tượng mô tả sự thay đổi cần xảy ra trong ứng dụng. Mỗi action bao gồm một thuộc tính type (xác định loại hành động) và có thể có thêm dữ liệu bổ sung để hỗ trợ thay đổi.
Ví dụ về một action:
javascript
Copy code
const addItem = (item) => ({
type: 'ADD_ITEM',
payload: item
});
Dispatch là phương thức dùng để gửi một action đến Redux store. Khi bạn muốn thực hiện một hành động nào đó trong ứng dụng (như nhấn nút), bạn sẽ gọi dispatch và truyền vào action đó.
Ví dụ sử dụng dispatch:
javascript
Copy code
dispatch(addItem({ id: 1, name: 'Sản phẩm A' }));