همانطور که در مقالات قبلی گفتیم، React Native یک فریمورک جاوا اسکریپتی متن باز است که از طرف فیسبوک توسعه داده شده که با استفاده از این فریمورک میتوانید برای هر دو سیستم عامل android و ios یک اپلیکیشن طراحی کنید.
اما همانطور که هر تکنولوژی مزایا و معایبی دارد , در این مقاله نیز به بررسی مشکلات استفاده از React Native می پردازیم که عبارتند از:
پشتیبانی نکردن از تمام APIها
React Native از تمام APIهای موجود برای اپلیکیشنهای Native پشتیبانی نمیکند. این فریمورک APIهای لازم را پشتیبانی میکند اما گاهی ممکن است API یا کارکرد بخصوصی را که شما به آن نیاز دارید پشتیبانی نکند. استفاده از این کاراییها از طریق ماژولهای محلی انجام میشود که در مورد پایینی مشاهده میکنیم.
ماژولهای محلی
از آنجایی که تمام APIها و کارکردها در React Native قرار ندارد، به همین دلیل حالت ماژولهای محلی ارائه شده است. این ماژول ها قسمتهایی هستند که در زبان Native نوشته شده اند و بعد از آن وارد کدهای React Native شده اند. به نظر راه حل مناسب و معقولی میآید، اما برای استفاده از این ماژول ها، توسعه دهنده نیاز دارد که از زبانهای Native نیز درکی داشته باشد به همین دلیل است که برخی افراد از استفاده React Native خودداری میکنند. البته در کنار این، چنین ماژولهایی میتواند روی کدها نیز تاثیر بگذارد به این دلیل که ماژولهای مربوط به Android با IOS متفاوت است.
طراحی
Andriod و IOS طراحی و ظاهر متفاوتی دارند که هر کدام برای خود دارای راهنما و شیوه های متفاوتی هستند. المانهای گرافیکی در React Native در پلتفرمهای مختلف تبدیل میشود اما این جایگزین کردنها در برخی مواقع ممکن است بی ثبات باشد. به همین دلیل بسیاری از اوقات نیاز دارید که شیوههای متفاوتی را برای کار کردن با المانهای طراحی در بر بگیرید.
نیاز به توسعه دهندگان native
باتوجه به اینکه شما فقط با جاوااسکریپت کد میزنید ولی گاهی اوقات به توسعه دهنده های native نیاز پیدا میکنید.تصور کنید که گاهی اوقات لازمه که در اپلیکیشن محاسبات سنگین انجام دهید،در اینگونه موارد به برنامه نویس native نیاز دارید.همچنین گاهی اوقات موقع استفاده از SDK های مختلف مثل Google Analytics برای تلفن همراه شما باید نحوه کار داخلی کتابخونه رو بفهمید تا بتونید این کتابخونه رو با React Native ادغام کنید.
رفتار متفاوت بعضی از کامپوننت ها در پلتفرم های مختلف
در برنامه نویسی های cross-platform در حالی که اکثر کامپوننت ها رفتار یکسان دارند ولی گاهی اوقات در پلتفرم های مختلف رفتارهای متفاوتی دارند.همچنین در React Native بعضی کامپوننت ها فقط مخصوص یک پلتفرم است و شما مجبورید از کتابخونه های جانبی برای یک پلتفرم مخصوص استفاده کنید.
کامپوننت های مهم مخصوص پلتفرم Ios:
- DatePickerIOS
- NavigatorIOS
- PickerIOS
- ProgressViewIOS
- SegmentedControlIOS
- SnapshotViewIOS
- ActionSheetIOS
- AdSupportIOS
- AlertIOS
- ImagePickerIOS
- VibrationIOS
کامپوننت های مهم مخصوص پلتفرم Android:
- DrawerLayoutAndroid
- ProgressBarAndroid
- ToolbarAndroid
- ViewPagerAndroid
- BackAndroid
- DatePickerAndroid
- PermissionsAndroid
- TimePickerAndroid
- ToastAndroid
محدودیت های انتزاع لایه
به منظور ایجاد قابلیت های بیشتر، یک انتزاع لایه در بالاترین سطح React Native ایجاد میشود.در صورتی که هر مشکلی در انتزاع لایه بوجود بیاد، اشکلات غیرمنتظره در اپلیکیشن شما بوجود میاد.تشخیص اینگونه خطا ها بسیار دشوار و وقت گیر است.داشتن یک انتزاع لایه باعث وابستگی به کتابخونه های جانبی برای بروزنگه داشتن فریمورک میشود.یکی دیگر از مشکلات انتزاع لایه اینکه شما باید برای اجرای طرح های سفارشی از زبان های native مثل Java, Objective-C، Swift استفاده کنید.این کار معمولا برنامه نویس ها رو خسته میکند و مزایای این فریمورک رو کاهش میدهد.
Document برای پشتیبانی React Native
اگرچه توسعه دهندگان React Native یک جامعه بالغ دارند اما مستندات در این زمینه به اندازه کافی نیست و مستندات سایت React Native هم برای شروع و در حد متوسط مناسب است .این امر باعث میشود که برنامه نویس ها برای بهبود و بهینه سازی عملکرد برنامشون دچار مشکل شوند.البته خوشبختانه توسعه دهنده های React Native داستان مشکلات و راه حل هاشون رو به اشتراک میزارند.
وابستگی به کتابخانه های جانبی
React Native فوق العاده است و کامپوننت های بسیار قوی در دل خودش دارد.اما در موارد خاص نیاز هست که ارزیابی و بررسی کنید که استفاده از کامپوننت های خود React Native برای کار شما مناسبه و به اندازه کافی قوی هست یا نه.
به عنوان نمونه Tab Bar. شما میتونید از Tab Bar خود React Native برای IOS استفاده کنید اما برای اندروید شما نیاز به کتابخونه جانبی دارید.وقتی این اتفاق بیفته شما باید دنبال یک کتابخونه باشید و بعد از پیدا کردن یک کتابخونه باید بررسی کنید که این کتابخونه مناسب کار شما هست یا نه که خودش کاری وقت گیره.
کتابخانه های جانبی قدیمی
در مورد وابستگی به کتابخونه های جانبی در بخش قبلی صحبت کردیم اما چیز جدیدی که باید بدونید اینکه با بروزرسانی React Naive گاها مشکلاتی برای این کتابخونه ها اتفاق میفته.بسته به پشتیبانی جامعه توسعه دهنده کتابخونه، میتونید انتظار داشته باشید که کتابخونه رو بروزرسانی کنند یا با مشکلات بروزرسانی دست و پنجه نرم کنید.
پشتیبانی نکردن از پردازش موازی
React Native از چند پردازشی یا پردازش موازی پشتیبانی نمیکند. React Native از تک پردازشی با استفاده از جاوااسکریپت استفاده میکند. عملکرد برنامه کاهش پیدا میکند اگه شما بخواین چندین فرایند رو همزمان اجرا کنید.برای مثال اگه شما بخواین برنامه چت زنده و گشت وگذار ویدئویی در برنامه داشته باشید.این کار رو نمی تونید با React Native انجام بدید.
اشکال زدایی استایل ها در React Native
سبک های اشکال زدایی استایل در React Native برای توسعه دهنده های وب مبتدی ممکنه کمی ناراحت کننده باشه.چون نمیتونند مانند وب با استفاده از حالت developer مرورگرها به اشکال زدایی بپردازند.البته خوشبختانه در نسخه های جدید React Native شما میتونید با استفاده از قابلیت hot reloading اشکال زدایی رو راحت تر انجام بدید.
بروزرسانی بسیار زیاد React Native
بروز رسانی های بیش از حد React Native باعث میشه تا توسعه دهنده ها گیج بشن و وسوسه بشن که پروژه خودشون رو به جدیدترین نسخه بروزرسانی کنند.گاهی اوقات آپدیت های جدید دارای مشکلاتی هست که مجبور میشید از نسخه های قدیمی دوباره استفاده کنید یا بعضی از قسمت های کدتون رو تغییر بدید.
جنبههای بلند مدت
همواره یک شک از نگرانی برای پشتیبانی بلند مدت از React Native وجود دارد. فیسبوک هر روز میتواند تصمیم بگیرد که دیگر از این فریمورک پشتیبانی نکند، این حالت وضعیت را برای انتخاب سخت میکند.
در این مقاله بعضی از محدودیت های React Native رو معرفی کردیم البته این محدودیت ها به هیچ عنوان باعث نمیشه تا فکر کنید React Native مناسب توسعه اپلیکیشن نیست.
نویسنده: الهه ابراهیمی