قبل از استفاده از هر ابزار و یا تکنولوژی، باید این سئوال ها را از خودمان بنماییم
درباره ری اکت هوک هم این سئوال مصداق دارد.
ایده اصلی ری اکت این بوده که پیچیدگی اپلکیشن ها را بوسیله تقسیم آن به کامپوننت های مجزا مدیریت کنیم، اما تقسیم صرفا اپلکیشن به کامپوننت ها نیاز ما را جواب نمی دهید و ما همچنین نیاز داریم منطق و یا logic ها را بین کامپوننت ها به اشتراک بگذاریم که به اصطلاح به آن sharing non visual logic می گویند.
از جمله لاجیک های که لازم داریم بین کامپوننت ها به اشتراک بزاریم
منطق مدیریت state کامپوننت ها
منطق مدیریت چرخه حیات کامپوننت ها
و یا منطق های خاص بیزنس ما
جهت این موضوع راحت ترین کار copy & paste است که روش خوبی نیست و مدیریت آن سخت است.
اما الگوی های برای این موضوع وجود دارد مانند Higher Order Component که در آن یک کامپوننت می سازیم که کامپوننت های دیگر را به عنوان پارامتر قبول می کند و یک سری لاجیک مشترک را به آنها اضافه می کند و یا به عبارتی برای منطق های مشترک HOC های مختلف درست می کنیم و از این طریق اشتراک گذاری لاجیک های مشترک را مدیریت می کنیم.
و یا الگوی یا pattern دیگر به نام Render Props که از حوصله بحث ما خارج است و می توانید به مستندات آن مراجعه فرمایید.
اما در هر صورت، فهم دو الگو فوق و استفاده از آنها پیچیده و سخت است.
اما api که ری اکت برای این موضوع در اختیار ما قرار داده که هم ساده، قابل ترکیب، قابل انعطاف و توسعه پذیر است هوک است.
که چند تا آنها در ری اکت آماده شده است به عنوان مثال useState جهت مدیریت state ها و useEffect جهت مدیریت چرخه حیات کامپوننت
اما شاه بیت این قضیه این است که شما می توانید لاجیک و منطقی که خاص بیزنس خودتان است را به صورت هوک دربیارید و آن را قابل استفاده مجدد نمایید.
به عنوان مثال جهت منطق fetch داده ها می توانیم یک هوک مانند زیر بنویسیم.
و به سادگی در کامپوننت های مختلف به شکل زیر آن را صدا نماییم.