ری اکت چیست و چه کاربردی دارد؟ – به زبان ساده
زندگی روزمره خیلی از افراد به اندازهای با دنیای دیجیتالی ترکیب شده که نمیتوانند روزی را بدون استفاده و کمک گرفتن از کامپیوترها و موبایلها سپری کنند. کاربران زیادی هستند که برای انجام بسیاری از کارهای خود، از خریدهای روزمره گرفته تا درخواست تاکسی و انواع تراکنشهای بانکی به این فناوری تکیه میکنند. در همین راستا، توسعه وباپلیکیشنها، وبسایتها و اپلیکیشنهای تلفن همراهی که بازدهی بالا، رابط کاربری جذاب و تجربه کاربری خوشایندی را در این رابطه فراهم کند، بسیار ارزشمند محسوب میشود. برای توسعه رابط کاربری چنین اپلیکیشنهایی، استفاده از کتابخانههای قدرتمندی همچون «ریاکت» (React)، بسیار رایج شده که بر اساس یکی از بهترین زبانهای برنامهنویسی وب یعنی جاوا اسکریپت ساخته شده است. در این نوشتار از مجله فرادرس، قصد داریم تا به زبانی ساده، شما را با این ابزار آشنا کرده و توضیح دهیم که ری اکت چیست، چه ویژگیهایی دارد و چه زمانی استفاده میشود.
در این مطلب، نخست تعریفی از این کتابخانه جاوا اسکریپت ارائه میدهیم و پس از آن به شما میگوییم که استفاده از React، به چه شکلی میتواند در توسعه اپلیکیشنهای مبتنی بر وب مؤثر واقع شود. به توضیح کامپوننتها میپردازیم و پس از معرفی انواع آن، مزایا و معایب هریک را شرح میدهیم. مفاهیمی همچون Props و وضعیت را نیز بیان میکنیم و پس از آشنایی با خصوصیات این کتابخانه محبوب، شرکتهایی که از React برای توسعه برنامههای خود استفاده کردهاند را معرفی میکنیم. همچنین، با توجه به اهمیت انتخاب منبع صحیح برای یادگیری، فیلمهای آموزشی مناسبی را نیز برای یادگیری این ابزار ارزشمند توسعه UI در اختیار شما قرار میدهیم.
ری اکت چیست؟
«ری اکت» (ReactJS) کتابخانهای است که با زبان جاوا اسکریپت نوشته شده و برای ایجاد «رابط کاربری» (UI) مورد استفاده قرار میگیرد. در واقع به کمک این کتابخانه اپنسورس میتوانید رابط کاربری مربوط به وبسایتها، وب اپلیکیشنها و اپهای موبایل - با ریاکت نیتیو - را توسعه دهید.
فرض کنید که در حال گشت و گذار در فیسبوک هستید و پس از لایک کردن پستی جالب، به خواندن کامنتهای آن مشغول میشوید. در همین زمان متوجه میشوید که شمارنده مربوط به تعداد لایکها هم افزایش پیدا میکند. در اینگونه مواقع ممکن است این موضوع فکر شما را مشغول کرده باشد که چگونه بدون بارگذاری مجدد کل صفحه، تنها بخشی از آن - مانند شمارنده لایکها و غیره - میتوانند بهروزرسانی شوند. همین مثال ساده، به شما میگوید که عملکرد و وظیفه ری اکت چیست.
کتابخانه ریاکت، که با نامهای React.js یا ReactJS نیز شناخته میشود ابزاری است که برای توسعه بخش فرانتاند اپلیکیشنها استفاده میشود و محبوبیت بسیار زیادی را در این رابطه پیدا کرده است. پیدایش این کتابخانه به بیش از ۱۰ سال قبل بر میگردد و نخست، به کوشش فردی بنام آقای «جردن واک» (Jordan Walke) در شرکت فیسبوک ساخته شد. کتابخانه ری اکت که برخی به اشتباه آن را چارچوب میدانند، در حال حاضر توسط شرکت Meta و جامعه اختصاصی متشکل از برنامهنویسان و شرکتهای دیگر نگهداری و پشتیبانی میشود.
یکی از خصوصیات ریاکت را میتوان مبتنی بودن آن بر «کامپوننتها» (Component) دانست. در این معماری، توسعهدهنده میتواند عناصر UI مستقلی را ایجاد کند که در مکانهای مختلف برنامه و به دفعات قابل استفاده هستند. درست مانند بلوکهای خانهسازی یا همان قطعات LEGO که آنها را با هدف ساخت چیزهایی بزرگتر و معنادار در کنار هم قرار میدهیم، با کامپوننتهای ریاکت نیز میتوانیم وباپلیکیشنهای مدرن، ریسپانسیو و جذابی را ایجاد کنیم که البته، فرایند نگهداری سادهتری هم دارند.
ویژگی دیگری که در ریاکت شاهد هستیم این است که تنها آن قسمتی از صفحه که تغییر کرده را رندر و بهروزرسانی میکند. بدینترتیب با پرهیز از بهروزرسانی سایر بخشها، بازده و کارایی برنامه بیشتر میشود. فرض کنید برنامه ما دارای صفحهای است که برخی اطلاعات مربوط به آب و هوا، سرعت باد، رطوبت، دمای هوا و غیره را در قالب کامپوننتهایی نشان میدهد. اکنون با تغییر دمای هوا، تنها همین بخش بهروزرسانی میشود و لزومی ندارد تا کل صفحه از سرور برگردانده شود.
با ریاکت، اپلیکیشنهای گوناگونی از «وباپلیکیشنهای تکصفحهای» (SPA) گرفته تا اپهای موبایلی اندرویدی و iOS - به کمک React Native - را ایجاد کنید. با این حال این کتابخانه فاقد برخی امکانات است. بهطور مثال، برای بهرهمندی از قابلیتهایی مانند مسیریابی، مدیریت وضعیت پیشرفته و غیره میبایست از کتابخانهها و فریمورکهای مرتبط استفاده کنید.
نقش ری اکت در MVC
در معماری MVC یا «مدل-نما-کنترلگر»، ری اکت را میتوان به عنوان ابزاری برای توسعه بخش «نما» (View) در اپلیکیشن در نظر گرفت. یعنی قسمتی از این الگوی طراحی نرمافزار که به نمایش رابط کاربری و تعاملات کاربر با اپلیکیشن رسیدگی میکند. استفاده از ریاکت در MVC مزیتهایی مانند آنچه در ادامه فهرست شده را برایمان بههمراه دارد.
- مدیریت بهتر رابط کاربری
- نگهداری آسانتر اپلیکیشن به این دلیل که بخشهای مختلف اپلیکیشن از هم جدا شدهاند.
- بهبود استفاده مجدد از کامپوننتها در اپلیکیشن
پیش نیازهای یادگیری ری اکت چیست؟
پیش از اینکه منابع مناسب برای یادگیری ریاکت را به شما معرفی کنیم، خوب است که با پیشنیازهای یادگیری این کتابخانه نیز آشنا باشید.
- HTML و CSS: برای یادگیری این زبانها میتوانید از فیلم آموزش پروژهمحور HTML و CSS از فرادرس که لینک آن در ادامه آورده شده، استفاده کنید.
- جاوا اسکریپت و ES6: برای یادگیری این زبانها میتوانید از فیلم آموزش JavaScript ES6 از فرادرس که لینک آن در ادامه آورده شده، استفاده کنید.
- نود جی اس: برای یادگیری نود جی اس میتوانید از فیلم آموزش مقدماتی Node.js از فرادرس که لینک آن در ادامه آورده شده، استفاده کنید.
یادگیری ری اکت با فرادرس چگونه است؟
در صورتیکه به تازگی قدم در مسیر یادگیری کتابخانههای برنامهنویسی فرانتاند گذاشتهاید، یا اینکه بهعنوان یک توسعهدهنده قصد دارید تا مهارتهای خود را گسترش داده و این کتابخانه جاوا اسکریپتی را برای ارتقای شغلی خود بیاموزید، در هر حال، روشهای مختلفی اعم از شرکت کلاسهای حضوری و آنلاین، مطالعه مقالات و کتب آموزشی، مشاهده ویدیوهای آموزشی یوتیوب و غیره برای این منظور، پیشِ روی شما قرار دارند. از آنجایی که انتخاب منبع مناسب، تأثیر زیادی در سرعت یادگیری و حفظ انگیزه شما در مسیر آموختن مهارتهای مختلف، بهخصوص کار با کتابخانه React دارد، بنابراین میبایست توجه زیادی به آن داشته باشید. از میان روشها و منابع یادگیری موجود، مشاهده فیلمهای آموزشی، یکی از شیوههای مدرنی محسوب میشود که بسیاری از محدودیتهای موجود در دیگر روشها را کنار گذاشته است.
بهطور مثال، با تهیه فیلمهای آموزشی، دیگر نیازی به صرف زمان بابت رفت و آمد به کلاس و هزینههای مرتبط با آن را ندارید. میتوانید مباحث گفته شده را بارها و بارها مشاهده کنید تا بر آن مسلط شوید. فارغ از اینکه در چه شهری زندگی میکنید میتوانید به فیلمهای آموزشی بسیار با کیفیتی دسترسی داشته باشید و بسیاری مزیت دیگر که از آنها بهرهمند خواهید شد. سازمان علمی و آموزشی فرادرس بهعنوان یکی از قدیمیترین پلتفرمهای آموزش آنلاین کشور، فیلمهای آموزشی متعددی را برای علاقهمندان یادگیری مهارتهای مختلف از جمله کدنویسی با کتابخانه جاوا اسکریپتی React در قالب مجموعه فیلمهای آموزش ری اکت مقدماتی تا پیشرفته از فرادرس منتشر کرده است که بهسادگی میتوانید از طریق لینک زیر به آنها دسترسی پیدا کنید.
در ادامه، عناوین برخی از فیلمهای آموزشی موجود در این مجموعه را فهرست کردهایم.
- مشاهده فیلم آموزش مقدماتی کتابخانه ReactJS در جاوا اسکریپت، ضمن معرفی و آشنا کردن شما با کتابخانه ریاکت و مفاهیم کاربردی ES6، مواردی همچون نصب و راهاندازی ابزارها، ساخت نخستین پروژه، معرفی کامپوننتها در ری اکت و استفاده از آنها، فرمها، Context API، هوکها را به شما یاد میدهد و در آخر نیز یک پروژه را پیادهسازی میکند.
سپس میتوانید از فیلمهای آموزش پروژهمحور که لینک آنها در ادامه آورده شده استفاده کنید تا مهارتهای خود را در بهکارگیری این کتابخانه افزایش دهید.
- فیلم آموزش پروژهمحور ری اکت جی اس، طراحی وب اپلیکیشن پیشرو PWA با React.js از فرادرس
- فیلم آموزش پروژهمحور ری اکت جی اس، ساخت To-Do List حرفه ای با React.js از فرادرس
- فیلم آموزش پروژه محور ری اکت جی اس، استفاده از هوک ها Hook در React.JS از فرادرس
ری اکت چه کاری انجام می دهد؟
در این قسمت، به شما توضیح میدهیم که ریاکت چگونه یکی از مشکلات رایج در وبسایتها را حل میکند.
روش سنتی
هنگامیکه قصد باز کردن یک وبسایت یا وباپلیکیشن را دارید، آدرس اینترنتی یا همان URL آن را در نوار آدرس مرورگر خود وارد میکنید. پس از انجام این کار، مرورگر شما، درخواستی را به سمت سرور ارسال کرده و پس از رندر و تولید پاسخ، صفحه وب را در مرورگر، به شما نمایش میدهد. اکنون، فرض کنید که روی یکی از گزینههای موجود در منوی این وبسایت که بهطور مثال، به صفحه محصولات در همین سایت لینک شده و اشاره دارد، کلیک میکنید. با انجام این کار، مرورگر دوباره در خواستی را به سرور ارسال میکند و پس از دریافت پاسخ، صفحه موردنظر را به شما نشان میدهد.
در واقع، برای مشاهده هر صفحهای از وبسایت مورد نظر یا دسترسی به هر مؤلفهای همچون تصاویر و غیره که روی سایت وجود دارد و قصد باز کردن آن را دارید، این روال درخواست و پاسخ به دفعات بین کلاینت که همان مرورگر شما است و سرور، انجام میشود. این شیوه بارگذاری وبسایت، با اینکه کاربر را به هدف خود میرساند اما گاهی اوقات ممکن است روی تجربهای که از بازدید وبسایت شما پیدا میکند تأثیر منفی بگذارد. برای مثال، فرض کنید که وبسایت شما، اپلیکیشنی مانند یک فروشگاه اینترنتی بزرگ است و با دادههای بسیار زیادی سر و کار دارد که میبایست به دفعات بهروزرسانی شوند. در این حالت، شیوهای که بیان شد ممکن است کارایی خوبی نداشته باشد و تعداد بارگذاری بیش از حد صفحه وب برای بهروزرسانی دادهها، تجربه کاربری نامناسبی را ایجاد کند.
مشکلی که در اپلیکیشنهای ساخته شده با JS بدون استفاده از ریاکت، با آن رو به رو هستیم، این است که برای بهروزرسانی دادههای روی صفحه برای کاربر، لازم است تا DOM صفحه بهصورت دستی تغییر کند. یعنی نخست پیدا کنیم که تغییرات روی چه عناصر و محتوایی بودهاند و سپس، آن موارد را از طریق DOM تغییر دهیم. این کار باعث میشود تا کل صفحه، مجدد بارگذاری شود. حتی اگر بخش کوچکی از آن نیاز به تغییر داشته باشد.
راهکار ری اکت
برای رسیدگی به مشکلاتی که اشاره کردیم، ریاکت، راهحل استفاده از SPA یا «اپلیکیشنهای تکصفحهای» را در اختیار شما قرار میدهد. نحوه کار این نوع اپلیکیشنها، به این صورت است که هنگام درخواست کاربر، تنها یک صفحه HTML برای او بارگذاری، و به اون نشان داده میشود. درخواستهایی که پس از آن صورت میگیرد نیز به کمک ساز و کارهای فراهم شده توسط زبان JS، تنها باعث بهروزرسانی و بارگذاری قسمتهای جزیی از صفحه میشوند. یعنی بهجای اینکه کل صفحه وب اپلیکیشن را بارگذاری کند، تنها قسمتی از محتوا یا صفحه، بهطور مثال، یک کامپوننت، را بهروزرسانی میکند.
در این شیوه، شاهد بازدهی بیشتری از اپلیکیشن خواهیم بود. ضمن اینکه تجربه کاربری بهتری را نیز برای بازدید کننده رقم میزند. به این دلیل که با هر درخواست از سوی کاربر برای دریافت بهطور مثال، یک محتوای جدید، نیازی نیست تا کل صفحه دوباره بارگذاری شود. ریاکت راهکاری ارائه میدهد که بر اساس آن، تنها قسمتها و بخشهایی از صفحه وبسایت که میبایست تغییر کنند، بارگذاری و واکشی میشوند. بدینترتیب کاربر به هدفش میرسد و تغییرات را مشاهده میکند. بدون اینکه کل صفحه توسط کلاینت بارگذاری شده باشد. این شیوه باعث میشود تا تعاملی بودن اپلیکیشن بیشتر حس شود و به مسیریابی سمت کلاینت نیز معروف است.
اما اگر میخواهید بدانید که نحوه انجام این رویکرد در ری اکت چیست، باید بگوییم که این کتابخانه از «Virtual DOM» استفاده میکند.
DOM اصلی
همانطور که میدانید «مدل شی سند» که به اختصار DOM هم خوانده میشود یک ساختار درختی از اسناد HTML ایجاد میکند که هر گره از این درخت در واقع به بخشی از صفحه وب ما اشاره دارد. پس از بارگذاری صفحه و ساخته شدن این رابط، میتوان با استفاده از جاوا اسکریپت عناصر صفحه را به لحاظ ساختاری، استایل و محتوا تغییر داد. همچنین میتوان رویدادهای موجود را مدیریت کرد. به زبان ساده از این طریق میتوان صفحات وب داینامیک ساخت که محتوای آن بر حسب نیاز کاربر میتواند تغییر کند. برای اینکه اطلاعات بیشتری را در مورد DOM بهدست بیاورید، پیشنهاد میکنیم تا مطلبی که لینک آن در ادامه آورده شده را مطالعه کنید.
DOM مجازی
DOM مجازی بر خلاف DOM اصلی که بیانگر ساختار واقعی موجود در UI اپلیکیشن است، نسخهای است که در حافظه نگه داشته میشود و بههمین دلیل، مجازی نام گرفته است. ریاکت با استفاده از DOM مجازی و مقایسه آن با DOM اصلی، تغییرات صورت گرفته را پیدا کرده و بهجای اینکه مانند شیوه سنتی، کل صفحه را مجدد بارگذاری کند، تنها مواردی که تغییر کردهاند را بازیابی و بهروزرسانی میکند.
به زبان ساده یعنی، بهجای اینکه کاربر منتظر بارگذاری کل صفحه و تولید DOM اصلی بماند، تنها تغییرات موجود در DOM مجازی روی DOM اصلی صفحه اعمال میشود و تنها مواردی تغییر کردهاند - یا به اصطلاح State آنها عوض شده - رندر میشوند. بدینترتیب، بازدید کننده، خیلی سریع شاهد تغییرات رابط کاربری و کامپوننتهای صفحه خواهد بود. با مطالعه مطلبی که لینک آن در ادامه آورده شده است، اطلاعات مفیدی را در مورد DOM مجازی بهدست خواهید آورد.
ویژگی های ری اکت چیست؟
ریاکت در حال حاضر جزو کتابخانههای مطرح و محبوب برای توسعه رابط کاربری محسوب میشود و تاجاییکه آمارها نشان میدهد نسبت به Vue.JS و Angular نیز برتری دارد. اما برای اینکه بدانید دلیل محبوبیت ری اکت چیست، لازم است تا با ویژگیهای این کتابخانه که در ادامه آورده شده، آشنا شوید.
- فرایند ساخت اپلیکیشنهای داینامیک را ساده میسازد. استفاده از جاوا اسکریپت در ساخت اپلیکیشنهای داینامیک ممکن است شما را خیلی سریع با کدهای حجیم و پیچیده مواجه کند. اما ریاکت بهدلیل نیاز به کدنویسی کمتر و امکانات بیشتری که فراهم میکند باعث سادهتر شدن فرایند ساخت وب اپلیکیشنها میشود.
- کارایی بهتری ارائه میدهد. کتابخانه ریاکت از مفهومی بهنام DOM مجازی استفاده میکند. طرز کار آن به این شکل است که وضعیت پیشین کامپوننتها را بررسی کرده و تنها، مواردی را در DOM اصلی بهروزرسانی میکند که دچار تغییر وضعیت شدهاند. میتوان گفت که استفاده از رویکرد DOM مجازی باعث میشود تا سرعت توسعه وباپلیکیشن بیشتر شود. به این دلیل که دیگر لازم نیست مانند آنچه در وباپلیکیشنهای سنتی اتفاق میافتد، تمامی کامپوننتها مجدد بهروزرسانی شوند.
- ری اکت دارای کامپوننتهایی است که به دفعات قابل استفاده هستند. برنامههایی که با ریاکت توسعه میدهیم از مؤلفههایی تشکیل شدهاند که آنها را کامپوننت مینامند. هر یک از این کامپوننتها نماینده یک عنصر UI در برنامه ما هستند که میتوان آنها را به دفعات مورد استفاده قرار داد. بهطور مثال، یک دکمه در برنامه میتواند یک کامپوننت باشد که دارای مجموعهای از خصوصیات است. در واقع یک صفحه وب را میتوان به کامپوننتهای مختلفی تقسیم کرد. کامپوننتها را میتوان در جایجای برنامه، مجدد استفاده کرد و این مورد باعث میشود تا زمانی که صرف ساخت اپلیکیشن میشود، بهمیزان قابل توجهی کاهش پیدا کند.
- یادگیری React بهنسبت آسان است. ریاکت دارای مفاهیم بهنسبت سادهای از جمله مباحث اصلی HTML و جاوا اسکریپت است. بههمین دلیل میتوان آن را بهآسانی و با انتخاب یک منبع مناسب یاد گرفت. اما این نکته را نیز مدنظر داشته باشید که برای تسلط به هر زبان و فریمورک یا کتابخانه جدیدی، لازم است تا مدتی را صرف یادگیری مفاهیم و نحوه استفاده از آن کنید.
- ابزارهای مخصوصی دارد که دیباگ برنامه را سادهتر میکند. یافتن خطاهای برنامه و رفع آنها یا به اصطلاح دیباگ کردن یکی از مسائل مهم در ساخت اپلیکیشن محسوب میشود. خبر خوب این است که اگر از کروم استفاده کنید افزونهای برای آن وجود دارد که ضمن تسریع عمل دیباگ وب اپلیکیشنها، این فرایند را آسانتر میکند.
- ریاکت در حوزههای گوناگونی نظیر ساخت اپهای موبایل و همچنین، وباپلیکیشنها قابل استفاده است. حوزه توسعه اپلیکیشن با ریاکت تنها به وب محدود نمیشود و شما میتوانید با فریمورکی بهنام React Native که بر مبنای همین کتابخانه ساخته شده، اپلیکیشنهای موبایلی هم توسعه دهید. بنابراین میتوان گفت که ریاکت هم برای ساخت وبسایتها و هم برای توسعه اپلیکیشن برای دستگاههای اندرویدی و iOS میتواند گزینه مناسبی باشد.
مواردی که توضیح داده شد، بخشی از ویژگیهای ریاکت محسوب میشوند که در واقع، اهمیت یادگیری این کتابخانه را بیان میکنند.
جریان داده های یک طرفه در ری اکت چیست؟
برای درک این ویژگی، نخست باید بدانید که در ساخت برنامههای ریاکت میتوانیم کامپوننتهای «تو در تو» (Nested) داشته باشیم که در واقع چیزی نیستند جز، کامپوننتهایی که درون کامپوننت های دیگر تعریف شدهاند. در واقع هر کامپوننت درونی نیز میتواند فرزندهای خود را داشته باشد و خود، فرزند کامپوننت بیرونی محسوب میشود. وقتی که میگوییم دادهها در ریاکت بهصورت یکطرفه یا به اصطلاح «Unidirectional» جریان پیدا میکنند منظورمان این است که دادهها برای انتقال از یک بخش یا کامپوننتی از برنامه به بخش یا کامپوننتی دیگر، تنها یک راه پیشِ روی خود دارند که آن راه از سمت والد به سمت فرزند است. در برنامههای ریاکت که کامپوننتها را بهصورت تو در تو و سلسلهمراتبی - یعنی کامپوننت فرزند درون کامپوننت والد - ایجاد میکنیم، این تکنیک به ما کمک میکند تا مشکلات احتمالی در برنامه را راحتتر شناسایی و رفع کنیم.
کامپوننت در ری اکت چیست؟
کمی پیشتر راجع به قطعات اسباببازی خانهسازی یا همان بلوکهای LEGO صحبت کردیم. بهطور معمول، برنامههای ریاکت را در قالب قطعه کدها یا همان کامپوننتها مینویسند که بیشباهت به این قطعات LEGO نیستند. از این لحاظ که شما میتوانید این مؤلفهها را در سراسر اپلیکیشن خود، یعنی در جایی که نیاز باشد، بهطور مجدد استفاده کنید و ترکیب آنها UI اپلیکیشن شما را شکل میدهد. با این مؤلفهها در واقع، تعیین میکنید که آن بخش از اپلیکیشن به چه صورتی نشان داده شود یا اینکه چه عملکردی داشته باشد. برای درک بهتر کامپوننتها، دکمهای با پسزمینه آبی رنگ و متن سفید رنگ را در صفحه وب خود تصور کنید که با کلیک روی آن رنگ پسزمینه صفحه عوض میشود. در اینجا دکمه بهعنوان یک کامپوننت، هم خصوصیات خود را دارد و هم، عملکرد مشخصی را ارائه میدهد.
کامپوننتهایی که در ریاکت میسازیم دارای کد، ساختار و استایل مخصوص به خود هستند که درون بدنه آن محصور شدهاند و آن را به مؤلفهای مستقل تبدیل میکنند. همین ویژگی باعث میشود تا بتوان آنها را دوباره در برنامه استفاده کرد. به این صورت که میتوانید کتابخانهای از این کامپوننتها ساخته و در مواقع لزوم، خود یا دیگران با دسترسی به آن، کامپوننتها را در پروژههای گوناگون بهکار ببرید. درست مانند همان قطعات LEGO که میتوانند در شکل دادن به اشیا مختلف - یا پروژههای دیگر - استفاده شوند.
فرایند طراحی یک کامپوننت ریاکت را در واقع میتوان به ساخت یک بلوک LEGO تشبیه کرد که طبق سلیقه خود و الزامات پروژه آن را میسازیم. این فرایند میتواند شامل مراحلی مانند کدنویسی، ایجاد ساختار و شکل دادن به کامپوننت با زبان نشانهگذاری HTML باشد. سپس، با زبان CSS، استایلهای لازم را روی آن اعمال میکنیم. از این طریق، خصوصیات ظاهری کامپوننت را مشخص میکنیم. در نهایت نیز از زبان برنامهنویسی جاوا اسکریپت کمک میگیریم تا رفتار و عملکرد کامپوننت را تعیین کنیم. بهطور مثال، تعیین کنیم که کامپوننت دکمه ما پس از کلیک کاربر، چه واکنشی از خود نشان دهد و بسیاری رفتارهای دیگر.
با طی کردن این مراحل، کامپوننتی خواهیم داشت که برای استفاده در اپلیکیشن آماده است. ضمن اینکه میتوانید آن را در اختیار سایر افراد برای استفاده در پروژههای گوناگون نیز قرار دهید. با تشبیهی که در بالا صورت گرفت، اکنون میدانید که ریاکت چگونه در توسعه اپلیکیشنهای پیشرفته میتواند مفید باشد و این فرایند را برایتان تسهیل کند. درواقع ریاکت این امکان را فراهم کرده که اپلیکیشن خود را بهصورت ماژولار ایجاد کنیم.
مثالی برای درک بهتر کامپوننت
برای اینکه درک بهتری از کامپوننتها در عمل پیدا کنید، یک مثال را با هم بررسی میکنیم. فرض کنید قرار است یک وباپلیکیشن شبکه اجتماعی بسازیم. در اینصورت کامپوننتهای ما میتوانند شامل مواردی باشند که در ادامه فهرست کردهایم.
- کامپوننت «Header» یا بخش بالایی صفحه: این کامپوننت، بیانگر هِدِر یا ناحیه بالای وبسایت ما است. یعنی جایی که مواردی مانند نام و لوگوی سایت ما، گزینهها و لینکهای که نشان دهنده منوی سایت هستند، نوار جست و جو و غیره را در بر میگیرد.
- کامپوننت «نمای» (Profile) کاربری: قطعه یا کامپوننت بعدی، اطلاعات یا پروفایل کاربر را نشان میدهد و میتواند شامل مواردی مانند عکس پروفایل، نام کاربر، معرفی کوتاه کاربر و غیره باشد.
- کامپوننت پست (Post) یا محتوا: این کامپوننت، محلی است که پست کاربر را نشان میدهد و مؤلفههایی مانند عنوان پست، محتوای متنی یا تصویری، نظرات، لایکها، بازدیدها و غیره را ممکن است درون خود داشته باشد.
- کامپوننت «نظرات» (Comment): در این قطعه، کامنتها یا همان نظرات کاربر روی یک پست را میتوان دید. این قسمت نیز میتواند متشکل از نام نویسنده نظر، متن نظر و غیره باشد.
- کامپوننت (Footer) یا بخش پایینی صفحه: در آخر نیز کامپوننت Footer را داریم که بهطور معمول مواردی مانند متن مربوط به کپیرایت، برخی لینکها و موارد اینچنینی را میتواند در بر بگیرد.
هر یک از این موارد را میتوانیم یک قطعه LEGO در نظر بگیریم که روی هم چیده شدهاند و در نهایت، UI اپلیکیشن را تشکیل میدهند.
انواع کامپوننت در ری اکت چیست؟
از انواع Component-های ری اکت میتوان به «کامپوننت های تابعی» (Functional Components) و «کامپوننتهای کلاسی» (Class Components) اشاره کرد که در ادامه، هر یک را توضیح و خصوصیات آن را شرح دادهایم.
کامپوننت های تابعی
از خصوصیات این نوع کامپوننتها میتوان به آسان بودن ساخت آن اشاره کرد و اینکه فاقد «State» درونی هستند. یعنی نمیتوانند وضعیت یا اطلاعات مربوط به خود را نگه دارند و برای رفع این مشکل از «قلاب» (هوک | Hook) استفاده میشود. این نوع کامپوننتها در واقع همان توابع جاوا اسکریپتی با خروجی HTML یا JSX هستند. ضمن اینکه میتوانند آرگومانهایی را در قالب «Props» بگیرند.
از مزیتهای کامپوننتهای تابعی میتوان به مواردی اشاره کرد که در ادامه آوردهایم.
- به لحاظ قواعد نوشتاری و همچنین عدم استفاده از کلمه کلیدی همچون this ، میتوان گفت که سینتکس کامپوننتهای تابعی، سادهتر از کامپوننتهای کلاسی است.
- ضمن اینکه تست و دیباگ این نوع کامپوننتها هم بهدلیل کدنویسی کمتر آن نسبت به کامپوننتهای کلاسی، آسانتر است.
معایب این نوع کامپوننتها را نیز در ادامه بیان کردهایم.
- همانطور که گفته شده کامپوننت های تابعی فاقد وضعیت داخلی هستند و برای مدیریت یا همان نگهداری «وضعیت»، ناچار به استفاده از Hook-ها هستیم.
- در این نوع کامپوننتها نمیتوانید از متدهای مربوط به چرخه حیات کامپوننتها استفاده کنید. لازم به یادآوری است که در ریاکت، کامپوننتها دارای چرخه عمری شامل ۳ مرحله «ورود کامپوننت» (Mounting) به DOM، «بهروزرسانی کامپوننت» (Updating) و «حذف کامپوننت» (Unmounting) هستند که شما میتوانید کارهای مدنظر خود را در این مراحل انجام دهید.
- انتخاب مناسبی برای ساخت رابطهای کاربری نه چندان پیچیده محسوب میشود.
کدهای ساخت کامپوننت های تابعی در ری اکت
در ادامه، مثالی از تعریف کامپوننت تابعی آوردهایم.
1function Car() {
2 return <h2>Hi, I am a Car!</h2>;
3}
این کامپوننت جدید، Carنام دارد که براساس قواعد، حرف اول نام آن نیز با حروف بزرگ نوشته شده است. دستورات HTML مورد نظر را نیز با return میتوانیم برگردانیم.
کامپوننت های کلاسی
اگر با تعریف کلاسها در اکما اسکریپت ۶ یا ES6 آشنایی داشته باشید، میتوان گفت که برای استفاده از کامپوننتهای کلاسی نیز مشکلی نخواهید داشت. این نوع کامپوننتها گزینه مناسبی برای توسعه اپهای پیچدهتر بهشمار میروند و برخلاف کامپوننتهای تابعی، در این نوع کامپوننتها امکان حفظ وضعیت کامپوننت و اطلاعات آن وجود دارد. همچنین، متدهای مربوط به چرخه حیات کامپوننتها که کامپوننتهای تابعی فاقد آن بودند در اینجا قابل استفاده هستند و بهکمک آنها میتوانیم کامپوننت را در شرایط مختلفی مانند هنگام اضافه شدن، بهروزرسانی یا حذف آن، بهشکل بهتر مدیریت کنیم. مورد دیگر اینکه این نوع کامپوننتها متدی بهنام render دارند که برای تولید HTML صفحه وب، مورد استفاده قرار میگیرد.
مزیتهایی که با استفاده از کامپوننتهای کلاسی از آن بهرهمند خواهیم شد را در ادامه فهرست کردهایم.
- همانطور که گفته شد این نوع کامپوننتها میتوانند وضعیت را حفظ کنند و به کمک این ویژگی میتوانیم کامپوننت با توجه به وضعیتی که دارد، بهتر مدیریت کرده و تغییرات لازم را در آن بهوجود آوریم. برای درک بهتر، مثال میزنیم. فرض کنید دکمهای داریم که قرار است با هر بار کلیک روی آن، رنگ پسزمینه کامپوننت دیگری در صفحه به میزان چند درجه تیرهتر شود. برای این منظور میتوان از کامپوننت کلاسی استفاده کرد و از وضعیت داخلی کامپوننتی که قرار است رنگ آن تغییر کند کمک گرفت. بدیهی است که در این مثال، مقدار رنگ پسزمینه فعلی، در وضعیت کامپوننت نگهداری میشود.
- در صورتی که قصد ایجاد کامپوننتهای پیچیده، نظیر مواردی با وضعیتهای پیچیدهتر و پویاتر، را داشته باشید، میتوانید روی این روش ساخت کامپوننت حساب کنید.
مزیتهای کامپوننتهای کلاسی را نیز میتوان به شکل زیر بیان کرد.
- علیرغم توانمندی بیشتر، کامپوننتهای کلاسی نیازمند کدنویسی بیشتری نسبت به کامپوننتهای تابعی هستند. این مورد باعث پیچیدگی بیشتر این نوع کامپوننتها شده است و یافتن خطاها و نگهداری آنها را نیز سختتر میکند.
- بهکارگیری کلمه کلیدی this مورد دیگری است که باعث پیچیدگی و سختی کدهای کامپوننتهای کلاسی میشود.
- پیچیدگیهایی که بیان شد در کل باعث سختتر شدن فرایند دیباگ و تست این نوع کلاسها میشود.
اکنون که با شیوههای نوشتن کامپوننتها در ریاکت آشنا شدهاید لازم است بگوییم که کامپوننتهای تابعی به دلیل سادگی بیشتری که فراهم کردهاند، طرفداران بیشتری نیز دارند و کمبودهای آن را نیز میتوان با بهکارگیری هوکها تا حدی جبران کرد. البته به این معنی نیست که کامپوننتهای کلاسی به کل، کنار گذاشته شده باشند. میتوان از آنها نیز در پروژه خود استفاده کرد. بهطور خلاصه میتوان گفت که برای ایجاد اپلیکیشنهای ساده بهتر است از کامپوننتهای تابعی استفاده کنیم و در مواردی که اپلیکیشن ما بزرگتر و پیشرفتهتر است، بهدنبال استفاده از کامپوننتهای کلاسی باشیم که توانایی نگهداری از State-های متعدد را دارند.
کدهای ساخت کامپوننت های کلاسی در ری اکت
در ادامه، مثالی از تعریف کامپوننت آوردهایم.
1class Car extends React.Component {
2 render() {
3 return <h2>Hi, I am a Car!</h2>;
4 }
5}
این نوع کامپوننتها دارای دستور extends React.Component در تعریف خود هستند. این دستور باعث میشود تا کامپوننت ما با ارثبری از React.Component ، امکان استفاده از توابع ارزشمند موجود در آن را داشته باشد. در این نوع کامپوننت، متد render() را نیز داریم که دستورات HTML مورد نظر را بر میگرداند.
در یکی از مطالب پیشین مجله فرادرس، نکاتی برای ساخت کامپوننت ری اکت را توضیح دادهایم که مطالعه آن میتواند برای شما مفید باشد.
Props در ری اکت چیست؟
در این قسمت به شما میگوییم که چگونه میتوان در ریاکت کامپوننتی ساخت که ظاهر و عملکردهای متفاوتی داشته باشد.
اگر ماژولها یا همان قطعات LEGO را دیده باشید، روی آنها برجستگیها و در زیر آنها فرورفتگیهایی وجود دارد که برای اتصال راحتتر این قطعات به یکدیگر، تعبیه شدهاند. این اتصالات به ما امکان میدهند تا با کنار هم قرار دادن قطعات بتوانیم اجسام گوناگون و بزرگتری را بسازیم. همین قضیه در مورد کامپوننتهای ریکت هم وجود دارد. در واقع، کامپوننتهای ری اکت به واسطه پارامترهایی بهنام «Props» یا همان «خصوصیات» (Properties)، بههم متصل شده و به تبادل اطلاعات میپردازند. بهوسیله همین پراپسها است که میتوانید کامپوننتها را طبق نظر و سلیقه خود تغییر دهید و انواع گوناگونی از آنها را بسازید.
حتما میدانید که تابع در برنامهنویسی میتواند ورودیهایی را از طریق پارامترها دریافت کند. این ورودیها از قبل، درون ساختار توابع تعریف شدهاند و هنگام صدا زدن تابع، این مقادیر را نیز در اختیار آن قرار میدهیم. در مورد کامپوننتها نیز با چنین موردی رو به رو هستیم و بهجای پارامترها از Props-ها استفاده میکنیم. هنگام ساخت کامپوننتها، پراپسهای مورد نیاز آن نیز مشخص میشوند. بهطور مثال، فرض کنید کامپوننتی داریم که نام فرد را دریافت کرده و پیام خوشآمدگویی را برای او چاپ میکند. هنگامی که از این کامپوننت استفاده میشود میبایست نام فرد یا همان مقدار Props را نیز به کامپوننت ارسال کنیم.
پس، با ارسال Props-های مختلف میتوانیم کامپوننتهایی داشته باشیم که عملکردهای مختلف یا ظاهر گوناگونی داشته باشند. تا این قسمت، دانستید که نحوه تبادل اطلاعات در کامپوننتهای ری اکت چیست و چگونه پراپسها ما را در ساخت اپلیکیشنهای منعطف و دلخواه در ریاکت یاری میدهند.
کلید در ری اکت چیست؟
هنگام توسعه برنامه با ریاکت گاهی اوقات لازم است تا کامپوننتهایی بهصورت مرتب و دورهای تولید شوند. بهطور مثال، برنامهای ساختهایم تا فهرستی شامل وظایف یک فرد و تسکهای قابل انجام او را نشان دهد. در اینگونه مواقع استفاده و تعریف «کلیدها» (Keys) اهمیت زیادی پیدا میکند با مشخص کردن کلید در ریاکت، هویت هر یک از آیتمهای لیست حفظ میشود. در واقع میتوان گفت که اگر برای لیستی از کامپوننتها، خصوصیت «کلید» را برای هر کامپوننت مشخص کرده باشیم، آنها یکتا بودن خود را حفظ کرده و پس از تغییر اضافه یا حذف شدن هم قابل شناسایی خواهند بود. به مثال خود باز میگردیم، فرض کنید کاربر پس از اتمام تسک مورد نظر روی دکمه «انجام شد» کلیک میکند و قرار است آن مورد حذف شود. چون به آن کامپوننت کلید یکتایی اختصاص دادهایم. اکنون میتوانیم عمل مورد نظر خود - یا حذف کردن - را روی آن کامپوننت خاص اعمال کنیم. به این دلیل که تمامی کامپوننتها قابل شناسایی هستند.
وضعیت در ری اکت چیست؟
در پاسخ به اینکه وضعیت یا «حالت» (State) در ری اکت چیست، باید بگوییم که میتوان آن را یک شی ریاکت دانست که برای نگه داشتن دادهها و اطلاعات مربوط به کامپوننت مورد استفاده قرار میگیرد. مثال تعداد لایکهای یک پست در فیسبوک که در ابتدای مطلب بیان شد را به خاطر بیاورید. هنگامی که پستی را لایک میکنید مقدار یا به بیان دیگر، وضعیت آن تغییر میکند و میبایست دوباره تولید یا به اصطلاح رندر شود. در این مثال، تعامل کاربر باعث تغییر وضعیت لایک و عملکرد کامپوننت آن شده است اما ممکن است سایر رویدادها نیز در این مورد نقش داشته باشند.
معروف ترین برنامه های ساخته شده با ری اکت چیست؟
در این قسمت، برخی از معروفترین اپلیکیشنهای ساخته شده با React و همچنین شرکتهایی را معرفی کردهایم که در توسعه محصولات خود از ریاکت استفاده کردهاند. البته برخی از این اپلیکیشنها مانند اینستاگرام را بهطور روزانه استفاده میکنیم و با آنها آشنایی داریم.
تعداد شرکتهای استفاده کننده از React و محصولات شناخته شدهای که در ساخت آنها از ریاکت استفاده شده، بسیار زیاد است. در ادامه، عناوین تنها تعدادی این شرکتها و نقشی که ریاکت در محصول ایفا میکند را فهرست کردهایم.
- شبکه اجتماعی فیسبوک: در ساخت فرانتاند وبسایت فیسبوک از ریاکت جی اس استفاده شده است. ضمن اینکه برای اپلیکیشن موبایل آن نیز از ریاکت نیتیو بهره گرفتهاند. از نکات مثبتی که ریاکت در این اپلیکیشن ایجاد کرده میتوان به این مورد اشاره کرد که محتوا و فیدهای کاربر بهصورت آنی بهروزرسانی میشود و برای این منظور، نیازی به بارگذاری مجدد صفحه نیست.
- پینترست: پلتفرم Pinterest، شبکه اجتماعی دیگری است که شهرت زیادی دارد و در ساخت آن از کتابخانه ریاکت استفاده شده است. در «دیزاین سیستم Gestalt» پینترست، کامپوننتهای مرتبط با وب اپلیکیشن ریاکتی این محصول و همچنین اپهای موبایلی React Native مربوط به پلتفرمهای اندروید و iOS آن نیز وجود دارد. در پینترست، شما میتوانید توانمندیها و کارایی حیرتانگیز ریاکت را در ساخت وباپلیکیشن SPA بهطور کامل حس کنید. این سیستم برای نمایش محتوا از «بارگذاری تدریجی» (Lazy Loading) استفاده میکند و قابلیت اسکرول بیپایانی را برای نمایش محتوای عکس و ویدیو با سرعت بسیار مناسب به کاربر خود عرضه میکند.
- اینستاگرام: اینستاگرام نیازی به معرفی ندارد و شاید جز مشهورترین مثالهای استفاده از ریاکت در توسعه اپلیکیشنها باشد. این برنامه که جزو محصولات شرکت متا محسوب میشود، در اپلیکیشن خود از ریاکت استفاده کرده است تا از این طریق تجربه خوبی را برای کاربران خود رقم بزند. ریاکت بهعنوان کتابخانه اصلی برای توسعه اینستاگرام انتخاب شده است و بسیاری از خصوصیات برجسته این پلتفرم نظیر تعیین موقعیت جغرافیایی، تگ کردن تصاویر و محتوا، API-های گوگلمپ و مهمتر از همه، بهینهسازی موتور جست و جوی اینستاگرام از آن استفاده کردهاند.
- واتساپ: اپلیکیشن معروف دیگری که در آن از تکنولوژی ریاکت استفاده شده، WhatsApp است که به احتمال زیاد، ارسال پیامهای متنی یا چندرسانهای را از طریق آن به دوستان و آشنایان خود امتحان کرده باشید. رابط کاربری این اپلیکیشن پیامرسان با ریاکت ساخته شده است تا تجربه کاربری خوبی را برای بازدید کننده بهدنبال داشته باشد.
- توییتر: کاربران توییتر، در اپلیکیشن آن میتوانند پیامهای کوتاهی را در حوزههای متنوع، ارسال کرده و به اشتراک بگذارند. همین مورد باعث شده تا به برنامه محبوبی برای اخبار فوری، بحثهای عمومی و غیره تبدیل شود. ریاکت یکی از کتابخانههای مورد استفاده در ساخت این برنامه بوده است.
از دیگر شرکتهایی که هر کدام بهنحوی از React بهره بردهاند میتوان به دراپباکس، نتفلیکس، Reddit، پیپال، Cloudflare، تسلا، Shopify، اسکایپ، گیتهاب و بسیاری موارد دیگر اشاره کرد. همانطور که مشاهده میشود شرکتهای بزرگی به کتابخانه ریاکت اعتماد کرده و بهدلیل مزیتهای زیادی که بههمراه دارد از جمله استفاده آسان، بهکارگیری بهینه منابع، امکان استفاده از کامپوننتها به دفعات، پشتیبانی متا از آن و غیره، این کتابخانه را در محصولات خود بهکار گرفتهاند.
مزایا و معایب ری اکت چیست؟
اکنون که میدانید ری اکت چیست، وقت آن رسیده تا با مزیتها و معایب این کتابخانه محبوب آشنا شوید.
در ادامه، به این موارد اشاره کردهایم.
مزیت های React
برخی از مزیتهایی که بهکارگیری ریاکت در توسعه اپلیکیشنها برایمان بهدنبال دارد را در ادامه بیان کردهایم.
- برنامههای ریاکت از DOM مجازی جاوا اسکریپت استفاده میکنند. این مورد باعث میشود تا برنامههای کارآمدتری داشته باشیم نسبت به زمانیکه از DOM اصلی سند استفاده میشود و در اینگونه مواقع، اپلیکیشن، سرعت کمتری دارد.
- شما با کمک گرفتن از ریاکت میتوانید برنامههایی را توسعه دهید که به لحاظ رابط کاربری، بسیار زیبا و کاربرپسند هستند.
- توسعه اپلیکیشنهای بزرگ و پیچیده با خصوصیاتی که توسط ریاکت فراهم شده سادهتر میشود. منظور، ویژگیهای مانند خوانایی بهنسبت خوب سورسکدهای آن، ماژولار بودن و غیره است.
- استفاده از ریاکت میتواند فرایند توسعه اپلیکیشن و برنامهنویسی را آسانتر کند.
- ریاکت، جامعه برنامهنویسان بزرگی دارد که هنگام رویارویی با مشکلات میتوانید به آن مراجعه کنید.
معایب و محدودیت های React
علیرغم توانمندیهای کتابخانه ریاکت در توسعه اپلیکیشنهای مدرن و پیشرفته که UI بینظیری هم دارند، اما باید اعتراف کرد که React در حالت عادی از دید موتورهای جست و جو بهینهسازی شاید سئوی خوبی نداشته باشد. به این دلیل که محتوا را در سمت کلاینت با جاوا اسکرپیت تولید یا به اصطلاح «رندر» میکند. اما با تکنیکهایی نظیر رندر کردن محتوا در سمت سرور میتوان این مشکل را حل کرد. برای اینمنظور از تکنیکهای خاصی و ابزارهایی مانند فریمورک Next.js استفاده میشود.
- در صورتیکه قصد یادگیری این فریمورک را دارید، مشاهده فیلم آموزش مقدماتی فریم ورک Next.js در JavaScript برای طراحی و توسعه اپلیکیشن ها از فرادرس که لینک آن در ادامه آورده شده میتواند برایتان سودمند باشد.
ادامه یادگیری ری اکت با فرادرس
اکنون، میدانید که ری اکت چیست و چه کاربردهایی دارد. همچنین با منابع مورد نیاز برای آموختن آن نیز آشنا شدید. حال اگر بخواهید مهارت خود را در این زمینه تقویت کنید، یکی از راههای آن مشاهده فیلمهای آموزشی از فرادرس است که عناوین و لینک آنها را در ادامه فهرست کردهایم.
- فیلم آموزش ساخت انیمیشن در ری اکت جی اس، کتابخانه GSAP در React.JS از فرادرس
- فیلم آموزش ساخت میکروسرویس با Nodejs و React از فرادرس
- فیلم آموزش طراحی رابط کاربری با «متریال یو آی ری اکت» (Material UI React) از فرادرس
- فیلم آموزش پروژهمحور ReactJS با فریم ورک Tailwind CSS از فرادرس
ضمن اینکه برای یادگیری ریاکت نیتیو نیز میتوانید از فیلمهای آموزشی فرادرس استفاده کنید که لینک آنها را در ادامه آوردهایم.
- فیلم آموزش مقدماتی ری اکت نیتیو و طراحی نرمافزارهای اندروید و iOS در React Native از فرادرس
- فیلم آموزش پروژهمحور ری اکت نیتیو، طراحی اپلیکیشن BMI در React Native از فرادرس
جمعبندی
در تدوین این نوشتار از مجله فرادرس، سعی بر این بوده تا به زبانی ساده به شما توضیح دهیم که ری اکت چیست و بهعنوان یک ابزار و کتابخانه فرانتاند جاوا اسکرپیتی، چه جایگاه و کاربردهایی دارد. همانطور که اشاره شد، React یک زبان برنامهنویسی جداگانه نیست و در واقع، کتابخانهای نامآشنا برای زبان جاوا اسکریپت محسوب میشود که بسیاری از افراد و شرکتها، آن را برای ساخت رابط کاربری محصولات خود بهکار گرفتهاند. همچنین خوب است بدانید که عملکرد آن تنها به توسعه UI محدود نشده و با افزونهها و ابزارهایی نظیر نکست جیاس، React Native ،Flux و غیره در ساخت دیگر قسمتهای توسعه اپلیکیشن و همچنین توسعه اپ موبایل نیز استفاده میشوند.
در دنیای توسعه وب کنونی، استفاده از فریمورکها و کتابخانههای وب اهمیت زیادی پیدا کردهاند. بهخصوص مواردی که برای توسعه فرانتاند وبسایتها بهکار میروند. ریاکت یکی از همین کتابخانهها برای ساخت UI تعاملی است که شهرت و محبوبیت زیادی پیدا کرده و به کمک آن میتوانید وباپلیکیشنهای پیچیده را بهسادگی توسعه دهید. این کتابخانه جاوا اسکریپتی، روی استفاده از کامپوننتها تمرکز ویژهای دارد و مؤلفههایی را شکل میدهد که قابل استفاده مجدد هستند و در ترکیب با هم میتوانند UI اپلیکیشن شما را ایجاد کنند. React سهم زیادی از بازار حوزه تخصصی خود را در اختیار دارد. این مورد باعث شده تا تقاضا نیز برای متخصصان این مهارت بیشتر باشد.