ری‌اکت: واقعا تفاوت فانکشن کامپوننت با کلاس کامپوننت چیه؟

دقیقا فانکشن کامپوننت‌ها چجوری با کلاس کامپوننت‌ها متفاوتند؟

برای مدت زیادی، تنها جوابی که درجا به ذهن میرسید این بود که کلاس کامپوننت ها امکانات بیشتری در اختیار ما میذارند ( مثل مدیریت state ). با اومدن Hooks ها این گذاره دیگه بکار نمیاد.

شاید شنیده باشید که یکیشون نسبت به اون یکی پرفورمنس بهتری داره. کدومشون؟ خیلی از اعداد و ارقامی که منتشر میشه ناقص هستند و خیلی نمیشه بهشون اتکایی کرد، منم بر اساس اونها نتیجه گیری نمیکنم. پرفرومنس در درجه‌ی اول به اینکه کدتون دقیقا داره چیکار میکنه بستگی داره، تا اینکه کلاس یا فانکشنال بودن کامپوننت بخواد روش تاثیری بذاره. تا جایی که ما مشاهده کردیم، تفاوت پرفورمنس بسیار ناچیزه، البته استراتژی‌های بهینه سازی کمی متفاوت از این جریان هستند.

در هر حالت پیشنهاد ما این نیست که بشینید کدتون رو بازنویسی کنید، اگرم اینکار رو میخواید انجام بدید باید دلایل بیشتری داشته باشید. hooks هنوز در ابتدای راه قرار داره ( مثل خود React در سال 2014 ) و خیلی از بهترین روش‌ها هنوز پیدا نشدند و توی فیلم‌های آموزشی دیده نمیشد.

خب این مارو به کجا میرسونه؟ آیا اصلا تفاوت اساسی بین فانکشنال کامپوننت‌ها با کلاس کامپوننت‌ها هست؟ البته که هست، توی الگوی ذهنی .

در این مقاله ما به بزرگترین تفاوت بین این دو نگاه می‌کنیم. از زمانی که در سال 2015 فانکشن کامپوننت‌ها معرفی شدند این تفاوت وجود داشت.

ادامه مطلب رو میتونید روی ویرگول بخونید: https://virgool.io/@shxhryar/classcomponent-vs-functionalcomponent-react-nmlyr2tns0eh

1 Likes

به نظر من OOP توی برنامه نویسی gui خیلی بهتره

1 Likes

بازنویسی کد شاید همیشه ممکن نباشه هر چند گاهی از ارتقا کد فعلی راحت تره،
من هر وقت روی یک پروژه ریکت کار میکنم اگر به صورت کلس کامپوننت پیاده شده باشه، حداقل هر کلسی رو قراره توش دست ببرم به فانکشنان کامپوننت تبدیل میکنم

2 Likes

من تجربه‌ی کمی دارم توی react و فقط یه کم باهاش کار کردم که با سیستمش آشنا بشم بعد بتونم با Clojure + reframe بهتر کار کنم.
ولی به نظرم function component منطقی‌تره و کار کردن باهاش راحتتره. البته این حرف کسیه که همیشه FP رو به OOP‌ ترجیح میده! ممکنه یه کم با تعصب صحبت کنم.

با این حرف تا حدود زیادی موافقم. ولی اگه با Immediate mode GUI کار کنیم، FP میتونه نتیجه‌ی بهتری داشته باشه. یه کم ممکنه سنگین‌تر از Retained mode باشه (از نظر فشار به CPU توی شرایطی که برناممون خیلی داینامیک نیست) ولی سرعتش بالاتره و اگه درست پیاده‌سازی شده باشه (مثل react توی وب یا conrod توی دسکتاپ)، اختلافش توی مصرف منابع خیلی کم میشه یا به صفر میرسه (منظورم اینه که همه چیز ریفرش نشه و فقط اون چیزی که تغییر میکنه ریفرش بشه)


توضیح:
اگه از react استفاده میکنید و با تغییر توی DOM کار خودتون رو پیش میبرید، درحال کار با retained mode هستید.
اگه برای طراحی یه چیزی از canvas استفاده میکنید و با کشیدن و پاک کردن روش، پروژه رو پیش میبرید، میشه immediate mode.

و لایبرریهایی که برای ساخت محیطهای گرافیکی (مثلا اپلیکیشنهای دسکتاپ) ساخته میشن، اصولا یکی از این دوتا حالت رو دارن (حالت دیگه‌ای نمیشناسم)
پرمصرف‌ترین لایبرریها فکر میکنم retained-mode‌ باشن. برای gameها اصولا از immediate mode استفاده میشه.

2 Likes

تا وقتی که بهتر نیست! :grin:

این رو امروز دیدم نظرم عوض شد

امروز برای اولین بار ازش استفاده کردم

ولی به نظرم بیشتر برای component های مجزا خوبه و نه مثل page ها که چند تا component رو مدیریت میکنن

اعتراف میکنم که اصلا متوجه نشدم چی گفتی :grin:

1 Likes