کانفیگ Context با typescript
چند وقتیه که به صورت مستمر پیگیر ریاکتم . تا حالا دنبال تایپاسکریپت نرفته بودم و تا اینکه دلو زدم به دریا و رفتم سراغش . در کمال ناباوری دیدم چقد خفنه و چقد کد رو تمیز میکنه .
تصمیم گرفتم یه مقاله بنویسم و یه توضیحاتی راجبه کانفیگ کانتکست با تایپاسکریپت بدم و باهم یه todolist ساده با قابلیت اضافه کردن todo بزنیم .
خب اول از همه باید ts رو به پروژه اضافه کنیم با دستور
npm install --save typescript @types/node @types/react @types/react-dom @types/jest
خب میریم سراغه تعریف type و interface ها . میتونید همه رو تو یه فایلی مثلا به اسمه types.ts بریزید و یا تو هر کامپوننت اینترفیس تعریف کنید.
حالا من همرو جدا کردم تو یه فایل به اسمه types.ts :
خب یک فایلی به نام Context.tsx میسازیم و توی اون کانتکستمونو قرار میدیم :
همونطور که میبینید تایپ کانتکست یه آرایه ای از اینترفیس ITodo هست . بنابراین با اینکار provider و consumer هم تایپشون یکی میشه .
خب حالا initialState چیه ؟ اینه :
قبله این که بریم سراغ reducer یکسری interface برای اکشن ها تو فایله types.ts ست میکنیم :
همونجور که معلومه یه اینترفیس پایه برای اکشن در نظر گرفتیم و هر اکشن با توجه به payload از اون extend میشه . و در آخر یه تایپ تعریف میکنیم که همه اکشن هایی که داریم رو با هم or میکنه (حالا اینجا یکی بیشتر نیس و اونم ContextAddTodoAction هست )
خب میریم سراغه همون فایله Context.tsx و شرو میکنیم به نوشتن reducer و provider
از useReducer اینجور استفاده میکنیم :
تو قسمته React.Reducer ، دوتا پارامتر برا تایپ داریم ، اولی تایپه استیتمون هست که یه آرایه از ITodo هاست و دومی هم تایپ اکشن هامونه ک قبلا با هم or شده بودن .
و reducer هم به این شکل:
و provider نیز :
خب اینجا یه مشکلی پیش میاد و اونم اینه که وقتی ما تایپه اولیه کانتکست رو گذاشتیم [ ]ITodo ، تایپ provider هم باید [ ]ITodo باشه . ولی همونجور ک میبینید تایپ value یه آبجکته .
برای حل این مشکل کافیه تایپه کانتکستمونو عوض کنیم و این ریختی شه :
تایپه کانتکست شد یه آبجکت که یه todos داره و یه dispatch . ورودی dispatch یه action هست و این تابع چیزی بر نمیگردونه void و مقدار اولیش هم یه فانکشن خالی میذاریم .
حالا فقط کافیه context رو export کنیم :
تمامم !!!
مطلبی دیگر از این انتشارات
۸ قدم برای حرفهایی شدن در React (قسمت دوم)
مطلبی دیگر از این انتشارات
چالشهای نسخه Production در React JS
مطلبی دیگر از این انتشارات
از تشخیص کلیک خارج از کامپوننت تا Type Assertions در تایپاسکریپت