السلام عليكم ورحمة الله. تقبل الله منا و منكم رمضان و جعله أعمالكم في ميزان حسناتكم.

هذه مجموعة أسئلة مقابلة كتبتها على عُجالة، طلبها مني أحد أصحاب شركات التطوير أن أكتبها له ليطرحها على المتقدمين لاحدى الوظائف المتاحة لديه، و لعلمكم أن React قليلة المعلومة في الويب العربي بالمقابل مما نراه باللغة الهندية أو الفارسية .. الخ.


  • ما هي React و ما الفرق بينها و بين React Native ؟

React عبارة عن مكتبة جافا سكربت تساعدنا على تطوير واجهات مواقع الويب (UI View)، و RN تستخدم لتطوير تطبيقات الهواتف الذكية و طبيعية (Native) على مختلف المنصات باستخدام جافا سكريبت أيضا.

  • كيف نشأت React Native ؟ و ما الفرق بينها و بين Xamarin ؟

RN بدأت كفكرة من فيسبوك هاكاثون أقيم سنة 2014 و تم تطويرها لتطلق النسخة الأولية منها سنة 2015، و الاختلاف بينها و بين زامارين ذكرته سابقاً ملخص من مقتطف:

  • هل نمكن أن نعتبر تطبيقات RN هي فعلا تطبيقات Native ؟

طبعاً، لأن RN تقوم بترجمته الى تطبيق طبيعي لانها تستخدم مكونات (Compoentns) و خدمات (API's) مباشرة من الأنظمة لا يمكن تمييزها عن سويفت و جافا و لغات أخرى.

  • هل دائما ما تشترك الشفرات البرمجية نفسها بين iOS و Android دائما؟ أم هنالك اختلافات؟ و ما هو الكود الذي نستطيع أن نخصص به خاصية معينة في iOS مثلا دون الاندرويد؟

نعم، نستخدم نفس الشفرات البرمجية بين المنصتين لأن شعار رياكت نيتف هو "تعلم مرة واحدة و أكتب في أي مكان" .

يمكننا استعمال خاصية Platform Module لنجعل تطبيقنا يقوم بأمر ما في iOS دون ان يعمل الاندرويد.

و للعلم أيضا توجد مكتبات مستقلة على جيت هاب تدعم نظاما معينا فقط دون الأخرى لكن عموما الشفرات تشتغل على المنصتين

  • قدمت الفيسبوك ضمن اطار العمل RN شيئا يدعى بـ دورة الحياة (lifecycle) فهل لك أن تخبرني ماذا تعمل هذه الدورة؟

دورة الحياة شيء مهم جدا في تطبيقات RN لأنها تمكننا من تخصيص تنفيذ إجراءات معينة في أوقات زمنية مختلفة و تمكننا معرفة المكونات مع مرور الوقت.

تعمل دورة الحياة على ثلاث مراحل:

  1. تهيئة المكون Initialization

  2. التحديث و التخصيص Update

  3. التدمير أو Destruction

  • ما الفرق بين استعمال Constructor و Getinitialstate ؟ و هل ترى استعمال ES6 أمرا مهماً؟

كلاهما يؤدي نفس العمل و النتيجة، الا أنه عندما نستعمل Constructor فاننا نستعمل أسلوب الجافاسكربت (ES6) ليسهل العمل على التطبيق و يكون أكثر وضوحا و شمولا للتطوير مستقبلاً.

نستعمل ES6 لأنها توفر لنا عدة أمور؛ لأنه سيكون syntax سهلا/بسيطا غير معقد و أقل مشاكل (Bug's) كما يمكن تطويره مستقبلاً ..الخ

  • ما هي حلولك لدعم اللغة العربية في تطبيقات RN ؟ و الاتجاه من اليمين لليسار؟

اللغة العربية تم دعمها الآن في RN و الاتجاه من اليمين لليسار تم تطويرها في النسخة و هنا أهم خطوات لجعل تطبيقك يدعم الاتجاهين

  • كيف يمكننا أن ننشأ وحدات أصلية (Native Modules) استنادا من لغات أخرى لتضمينها داخل React Native؟

أحيانا نحتاج الى استخدام بعض Platform API التي تقدمها الأنظمة لكن لم يتم دعمها بعد في RN فمثلا نستعين بانشاء شفرات Object-C عبر Subclass و نرفق معها ملفين NativeModuleEx.h ..الخ

و نقوم باستدعائها عبر RN بـ NativeModules

  • ما الفرق بين معمارية MVC و معمارية Flux ؟

في MVC فاننا نقوم بفصل برمجياتنا الى 3 أشياء (Model) و الذي يقوم بالتعامل مع البيانات و العرض (View) الذي نظهر به التطبيق و المتحكم (Controller) الذي يربط لنا بين الاثنين السابقين. و تدفق البيانات فيه غير محدد أحادي أم ثنائي.

بالعس في Flux تماما فانه يستعين تدفق البيانات احادي الاتجاه و بأربعة خصائص و هي (Actions) تساعدنا على تحويل البيانات نحو dispatcher ثم يأتي (Stores) الذي يشابه عمله الـ Model في mvc يتم التحويل الى (View) كما هو معروف و هكذا دواليك.

  • ما رأيك بـ Redux و Mobx ؟ و ما أهم الاختلافات بينهما؟ و أيهما تستعمل و لماذا؟

كلاهما مكتبتين يؤديان نفس الغرض و هو التحكم في state management.

فلسفتهما مختلفة عن بعضهما فـ Redux يستخدم نمط flux في إدارة state management و تحكم أحادي One Store و أسلوبه متأثر بـ functional programming لذلك يظهر معقدا نوعا ما لكنه الأشمل في الإدارة التامة للتطبيقات الكبيرة جداً

بعكس mobx فانه يستخدم نمط object-oriented كثيراً و هو الأسهل في التعلم و الاستخدام و يملك عدة متحكمات Multiple Stores.

  • كيف نقوم باختبار الوحدات ضمن تطبيقنا (Unit Testing)؟

نقوم باختبار التطبيق عبر مكتبة Jest التي تقدمها شركة الفيسبوك .. نقوم باختبار Component's لنرى مدى فاعليتها و عملها ليكون التطبيق جاهزا للنشر.

  • ما هي نظرتك لمشروع Expo و هل تراه مناسبا لعملنا و تطبيقاتنا داخل الشركة؟

Expo مشروع جيد جدا و مسهل لعدة مشاكل ربما نواجهها عندما يتعامل الفريق مع بعضه البعض لتجربة التطبيق. لكن مشكلته الوحيدة أن حجم تطبيقاته كبير للغاية، ولا يدعم بعض المكتبات ربما سيدعمها مستقبلاً.


بالتوفيق للجميع ..