علیرضا شهابی
علیرضا شهابی
خواندن ۳ دقیقه·۴ سال پیش

خداحافظی با Redux در 10 خط کد (‌ useReducer + Context API )

با سلام به همه دوستان امیدوارم که تو این روز های کرونایی حال همتون خوب باشه ‌, این روزا بین برنامه نویس های React js خیلی باب شده که میتونیم دیگه از `Redux` استفاده نکنیم و به جای اون از `Context API` و `useReducer` استفاده کنیم.

برای اینکه بهتر بتونید متوجه بشید باید یه دانش نسبی از مباحث Hooks و Redux داشته باشید که پیشنهاد میکنم این پست هارو بخونید و بعدش به ادامه مسیر ادامه بدین.


https://virgool.io/iran-react-community/react-context-api-xoxyjtbvzdqp



خیلی عالیه ولی یه سری سوال پیش میاد که ما میتونیم چند تا Reducer هم کنار همدیگه به صورت Sync داشته باشم ؟ یا مثلا چطوری میتونیم از Wrapper Hell توی پروژمون جلوگیری کنیم یا ازین دست مساعل ...

A wrapper hell is like :
<ThemeProvider>
--- <AuthProvider>
------ <NewsProvider>
--------- <PostProvider>
------------ And So on..
--------- </PostProvider>
------ </NewsProvider/>
--- </AuthProvider>
</ThemePrivder>

خوب بنظرم برای اینکه بهتر متوجه بشید من یه پروژه خیلی ساده با Redux میاریم بالا بعدش بعد ازینکه با ساختارش آشنا شدیم میایم و عین همون رو با `useReducer` , `Context API` میسازیم.



کد بزنیم ?.

حالا شروع میکنیم به ساخت یه پروژه ساده با Redux :

  • اول از همه باید Provider و Store رو به پروژه اضافه کنیم.
  • در مرحله بعدی باید `rootReducer` رو ایجاد کنیم.
  • و در مرحله آخر `Action` ها رو ایجاد میکنم .

خوب الان ما یک پروژه ساده با Redux بالا آوردیم و میتونیم ازش استفاده کنیم.

خوب حالا بریم برای ساخت همین ساختار با استفاده از Context API و useReduder.

فقط قبل از شروع پیشنهاد میکنم که حتما پست زیر رو بخونید تا درک بهتری از hook ها و مخصوصا useReducer پیدا کنید .
https://virgool.io/iran-react-community/react-hooks-gnhzymcx21sf


  • مرحله اول با استفاده از Context API یک StateProvider میسازیم به این شکل .
StateProvider.js
StateProvider.js

خوب تو این مرحله ما یک StateContext ساختیم و از روی اون یک Provider به نام StateProvider ساختیم که value اون useReducer هست که کارش اینکه یک Reducer و initialState میگیره و به ما state و dispatch برمیگردونه.

  • مرحله بعدی اینه که میایم و rootReducer رو میسازیم که من برای اینکه راحت تر باشید اول reducer های مختلف رو براتون مینویسم و بعدش میریم سراغ rootReducer .
reducers.js
reducers.js

همون طور که میبینید عین همون حالت قبلیه ولی فقط برای توابعی که داریم اسم های userReducer , countReducer رو قرار دادیم. حالا rootReducer ما یه چنین شکلی داره :

rootReducer.js
rootReducer.js

خوب همون طور که میبیند برای اینکه به userReducer و countReducer ما همون state برسی که ما نیاز داریم به این شکل اومدیم state رو destruct کردیم.

  • حالا در مرحله آخر برای استفاده ازین StateProvider کافیه که اون روی App.js خودمون Wrap کنیم و با استفاده از useStateValue که ساختیم بیایم و از state , dispatch که به عنوان خروجی بهمون میده استفاده کنیم .
useStateValue.js
useStateValue.js


و تماااام حالا برای اینکه بتونید درک بهتری از موضوع پیدا کنید یه دمو براتون گذاشتم که قشنگ بتونید یه تنی به کد بزنید.

دمو .

https://codesandbox.io/s/react-contextapi-reducer-8s6k1?autoresize=1&fontsize=14&hidenavigation=1&theme=dark


جمع بندی ?.

خب من فعلا تو این پست قصد ندارم بگم که اصن اینکار کار درستیه یا نه ولی صرفا تجربه جالبیه چون هم توی این مسیر تونستین تجربه خوبی در استفاده از Context , useContext , useReducer ها بدست بیاورید.

و در آخر ممنون میشم که اگر این پست رو تا آخر خوندین نظر خودتون رو به عنوان خواننده بگید که من هم بتونم پیشرفت بیشتری توی نوشتن این مقالات بکنم.

reactcontext apihooksusereducerusecontext
Full Stack Javascript Developer && ایده آل گرا && عاشق برنامه نویسی وب
شاید از این پست‌ها خوشتان بیاید