Redux یک کتابخانه مدیریت حالت (state management) است که به شما کمک می‌کند تا وضعیت برنامه‌های React.js را به صورت پیش‌بینی‌پذیر و متمرکز مدیریت کنید. این کتابخانه بر پایه اصول معماری Flux طراحی شده و برای برنامه‌هایی با وضعیت پیچیده یا اشتراک‌گذاری داده‌ها بین کامپوننت‌ها مفید است.

اصول اصلی Redux

یک منبع حقیقت (Single Source of Truth):
تمام وضعیت برنامه در یک store متمرکز ذخیره می‌شود که یک جا برای نگهداری همه داده‌ها فراهم می‌کند.

حالت فقط خواندنی است (State is Read-Only):
وضعیت نمی‌تواند مستقیماً تغییر کند. تنها راه تغییر وضعیت، ارسال یک action است.

تغییرات با توابع خالص (Reducers) انجام می‌شود:
تغییر وضعیت از طریق توابع خالصی به نام reducer انجام می‌شود که ورودی آن وضعیت فعلی و اکشن است و یک وضعیت جدید را برمی‌گرداند.

چرا Redux در React استفاده می‌شود؟

مدیریت پیچیدگی حالت:
Redux کمک می‌کند تا مدیریت وضعیت در برنامه‌های بزرگ ساده‌تر شود.

اشتراک‌گذاری داده‌ها:
زمانی که نیاز به اشتراک‌گذاری داده‌ها بین چندین کامپوننت باشد، Redux این کار را با سهولت انجام می‌دهد.

پیش‌بینی‌پذیری:
به دلیل اصول و ساختار ساده Redux، تغییرات وضعیت کاملاً قابل پیش‌بینی و دیباگ هستند.

ابزارهای توسعه (DevTools):
Redux DevTools امکان مشاهده تاریخچه تغییرات و بازگردانی به وضعیت‌های قبلی را فراهم می‌کند.

مفاهیم کلیدی Redux

Store:
جایی که کل وضعیت برنامه ذخیره می‌شود.

Action:
یک شی ساده که نوع تغییر (type) و داده‌های لازم برای تغییر (payload) را مشخص می‌کند:


const action = { type: 'INCREMENT', payload: 1 };

Reducer:
تابعی خالص که وضعیت فعلی و اکشن را دریافت کرده و وضعیت جدید را بازمی‌گرداند:

const reducer = (state = { count: 0 }, action) => {
switch (action.type) {
case 'INCREMENT':
return { ...state, count: state.count + action.payload };
default:
return state;
}};

Dispatch:
متدی که برای ارسال یک اکشن به استور استفاده می‌شود:

store.dispatch({ type: 'INCREMENT', payload: 1 });

Selector:
برای استخراج داده‌های خاص از وضعیت استفاده می‌شود.

نحوه استفاده Redux در React

نصب Redux و React-Redux:

npm install redux react-redux

ساخت استور:

import { createStore } from 'redux'; const store = createStore(reducer);

اتصال React به Redux: از کامپوننت <Provider> برای ارائه استور به کل برنامه استفاده می‌شود:

import { Provider } from 'react-redux';
<Provider store={store}>
    <App />
</Provider>;

اتصال کامپوننت‌ها: با استفاده از useSelector و useDispatch در کامپوننت‌ها به وضعیت و اکشن‌ها دسترسی پیدا می‌کنید:

import { useSelector, useDispatch } from 'react-redux';

const Counter = () => {
    const count = useSelector(state => state.count);
    const dispatch = useDispatch();

    return (
        <div>
            <h1>{count}</h1>
            <button onClick={() => dispatch({ type: 'INCREMENT', payload: 1 })}>Increment</button>
        </div>
    );
};

Redux Toolkit

برای ساده‌تر کردن استفاده از Redux، Redux Toolkit معرفی شده که ابزارها و امکانات پیشرفته‌تری مثل ساده‌سازی reducerها و مدیریت وضعیت را فراهم می‌کند. برای استفاده از آن:

npm install @reduxjs/toolkit

چه زمانی Redux استفاده کنیم؟

Redux زمانی مناسب است که:

برنامه شما پیچیده باشد و حالت‌های زیادی را مدیریت کند.

نیاز به اشتراک‌گذاری داده بین کامپوننت‌های زیادی وجود داشته باشد.

نیاز به تاریخچه وضعیت یا دیباگ ساده باشد.