– درک کاربر در React – Community Dev

useReducer یک قلاب React است که جایگزینی برای آن فراهم می کند useState برای مدیریت منطق پیچیده دولت. این امر به ویژه هنگامی مفید است که انتقال دولت به حالت قبلی بستگی داشته باشد یا چندین حالت زیر را درگیر کند.
const [state, dispatch] = useReducer(reducer, initialState);
- کاهش دهنده: تابعی که وضعیت فعلی و یک عمل را به خود اختصاص می دهد ، سپس حالت جدید را برمی گرداند. بر اساس Action.Type ، حالت جدید را برمی گرداند.
- InitialState: مقدار اولیه دولت.
- حالت: ارزش حالت فعلی را در اختیار دارد
- اعزام: تابعی که برای ارسال اقدامات به کاهش دهنده استفاده می شود.
const initialState = {count : 0};
function reducer(state, action) {
switch (action.type) {
case "increment":
// Return a NEW object with the updated property
return { ...state, count: state.count + action.payload };
case "decrement":
return { ...state, count: state.count - action.payload };
// ❌ ❌ BAD: Returns a number, not the state object shape! AVOID
// case "increment":
// return state.count + action.payload;
default:
throw new Error("Unknown action type");
}
}
function Component(){
const [state, dispatch] = useReducer(reducer, initialState);
const incrementCount = function(){
//sends an action to the reducer, updating the state accordingly.
dispatch({ type: "increment", payload: 1 })
}
const decrementCount = function(){
//sends an action to the reducer, updating the state accordingly
dispatch({ type: "decrement", payload: 1 })
}
return (
<button onClick={incrementCount}>+button>
<span>Count: {state.count}span>
<button onClick={decrementCount}>-button>
)
}
📌در
reducerباید عملکرد خالص باشد و یک شیء کاملاً جدید را برگرداند.
چگونه usereducer کار می کند: جریان
در اینجا فرآیند گام به گام توضیح می دهد که چگونه اجزای اجزای آن useReducer تعامل:
-
تنظیم اولیه: هنگامی که مؤلفه شما برای اولین بار ارائه می شود ،
useReducerبا شما فراخوانده می شودReducer FunctionوinitialStateبشر جریان را برمی گرداندState Object(کهinitialStateدر ابتدا) وDispatch Functionبشر -
ماشه رویداد: اتفاقی در برنامه شما رخ می دهد که نیاز به تغییر حالت دارد (به عنوان مثال ، کاربر روی یک دکمه ، انواع در یک قسمت ، داده ها وارد می شود).
-
اعزام یک عمل: کنترل کننده رویداد برای آن رویداد تماس می گیرد
Dispatch Functionبشر شما عبور می کنیدAction Objectبهdispatchبشر اینAction Objectحاوی اطلاعاتی در مورد چه تغییر باید اتفاق بیفتد (type) و هر داده مورد نیاز برای آن تغییر (payload).-
مثال:
dispatch({ type: 'INCREMENT', payload: 1 })
-
مثال:
-
کاهش دهنده به نام: واکنش نشان می دهد
Action Objectشما اعزام کردید و با خود تماس می گیریدReducer Functionبشر این دو آرگومان را برای کاهش دهنده شما ارائه می دهد:- در جاری
State Objectبشر - در
Action Objectشما فقط اعزام کردید. -
مثال:
reducer(currentState, { type: 'INCREMENT', payload: 1 })
- در جاری
-
محاسبه حالت جدید: درون شما
Reducer Function، شما ازaction.type(وaction.payloadدر صورت لزوم) برای تعیین نحوه محاسبه طرف دیگر دولت بر اساس جاری دولت این به طور معمول با استفاده از a انجام می شودswitchبیانیه یاif/elseشرایط بر اساسaction.typeبشر از نظر مهم ، کاهش دهنده باید خالص باشد و کاملاً برگردد جدید شیء حالت (immutability) ، موجود موجود را تغییر ندهید.-
مثال: بر
{ type: 'INCREMENT', payload: 1 }، کاهش دهنده ممکن است برگردد{ ...currentState, count: currentState.count + 1 }بشر
-
مثال: بر
-
به روزرسانی حالت:
useReducerشیء دولت جدید را که توسط شما برگشته است دریافت می کندReducer Functionبشر سپس وضعیت داخلی مرتبط با مؤلفه شما را به روز می کند. -
RE-RENDER: واکنش نشان می دهد که دولت توسط
useReducerتغییر کرده است این مؤلفه شما (و به طور بالقوه فرزندان آن) را به آن برنامه ریزی می کند دوباره دادنبشر هنگامی که مؤلفه دوباره رد می شود ،useReducerهوک اکنون باز می گردد به روز شدهState Objectاز مرحله 6 ، UI شما اطلاعات را بر اساس این حالت جدید نمایش می دهد.
بنابراین ، useReducer یک چرخه ساختاری را فراهم می کند: an action در حال توصیف یک تغییر در نظر گرفته شده است -> reducer function حالت جدید را بر اساس وضعیت فعلی و عمل محاسبه می کند -> React به روز می کند state -> مؤلفه مجدداً با حالت جدید در dispatch function ماشه ای است که این چرخه را شروع می کند.
چه زمانی استفاده کنید useReducer❓
- هنگامی که انتقال حالت پیچیده تر است (زنجیره های ایز یا به روزرسانی های چندگانه مرتبط).
- هنگامی که به مدیریت دولت متمرکز نیاز دارید.
- شما چندین متغیر حالت مرتبط دارید.
- به روزرسانی های حالت وابسته به هم هستند.
- وقتی وضعیت بعدی به وضعیت قبلی بستگی دارد.
- شما می خواهید اجزای خود را تمیز تر و خواندنی تر نگه دارید.
چرا استفاده کنید useReducer❓
در حالی که useState برای مدیریت حالت ساده کافی است ، می تواند دست و پا گیر شود وقتی:
- این مؤلفه دارای چندین متغیر حالت است.
- به روزرسانی های دولتی در بین چندین رویداد رویداد پراکنده می شوند.
- به روزرسانی های چند حالته باید در پاسخ به یک رویداد همزمان اتفاق بیفتد.
- به روزرسانی های حالت به متغیرهای حالت دیگر بستگی دارد. در این موارد ،
useReducerبه سازماندهی به روزرسانی های حالت به روشی ساخت یافته تر کمک می کند.
🧭 چه موقع از چه چیزی استفاده کنیم؟
| مورد استفاده | رویکرد توصیه شده |
|---|---|
| حالت محلی ساده (به عنوان مثال ورودی های فرم ، ضامن) | useState |
| دولت پیچیده محلی (به عنوان مثال به روزرسانی های تو در تو ، وابستگی ها) | useReducer |
| دولت جهانی را در یک برنامه کوچک و متوسط به اشتراک گذاشته است |
useReducer + API زمینه |
| حالت جهانی در یک کاربرد بزرگ و پیچیده | مجدداً |
✅ نتیجه گیری
در useReducer هوک یک جایگزین قوی برای useState، به ویژه مناسب برای مدیریت منطق و سناریوهای پیچیده دولت که در آن حالت بعدی به برنامه قبلی بستگی دارد. با متمرکز کردن انتقال حالت در یک عملکرد کاهش دهنده خالص ، useReducer پاک کننده تر ، کد نگهدارنده تر را ترویج می کند و پیش بینی تغییرات حالت را بهبود می بخشد.
این یک انتخاب عالی است وقتی:
- شما چندین بخش مرتبط با آن دارید.
- به روزرسانی های حالت وابسته به هم وابسته یا پیچیده هستند.
- شما می خواهید منطق حالت را از منطق UI برای خوانایی بهتر جدا کنید.
درک useReducer نه تنها به ساختار ساختار دولت به طور مؤثرتری در مؤلفه ها کمک می کند ، بلکه پایه و اساس محکمی برای کار با ابزارهای پیشرفته تر مانند Reduxبشر
لایک ، نظرات و بازخورد خوش آمدید!
برنامه نویسی مبارک!



