چه چیزهایی را از React Native را دوست ندارید؟

حدود دو ماه پیش مهندسان فیسبوک سوالی با این عنوان مطرح کردند”?What do you dislike about React Native”. فیسبوک در حال بازنویسی هسته React Native هست و هدف بیان کردن این سوال دخیل کردن نظرات توسعه دهندگان React Nativeدر rewrite این فریمورک است.در ادامه با همدیگه سوالاتی که توسعه دهندگان بیان کردند و پاسخ های مهندسان فیسبوک رو بررسی می کنیم

مهندسین فیسبوک : ما از زمانی که تصمیم به rewrite هسته React Native با (Fabric (#4 و( TurboModules (#40 گرفتیم،شروع به حذف و تغییر تعداد زیادی modules به عنوان Lean Core داشته ایم.تعداد pull requests ها را به 70 عدد در مقایسه با 280 عدد در December از طریق merging و close کاهش داده ایم.به طور همزمان میانگین تعداد Pull Requests باز شده در روز از 3.5 به 7 افزایش یافته است.

ما سرانجام به تمامی issues هایی که در #64 منشن شده بودند،پاسخ دادیم.لطفا این کامنت رو بخونید تا متوجه بشید که ما چگونه این لیست رو آماده کردیم.پیشنهاد میکنیم قبل از شروع به خوندن این مقاله یک فنجان قهوه یا یک میان وعده صرف کنید و بعد شروع به خواندن این متن کنید

Upgrading requires a lot (too much?) effort

ارتقاء از یک نسخه به دیگری کار سختی است و باید سخت کار کنید و زمان زیادی را صرف کنید به خصوص زمانی که چندین نسخه را منتشر کرده اید و باید به صورت دستی ارتقاء را انجام دهید.

Votes: 572
Tags: upgrading
Estimated time to fix: ~3-6 months
(Point of contact: Christoph Nakazawa (@cpojer)

مهندسین فیسبوک : ما اطلاعات بیشتری بر روی گیت هاب خواسته ایم تا یک overview خوب نسبت به مشکلات ارائه دهیم اما این کار مدت زمان زیادی طول می کشد تا مشکل به صورت کامل برطرف شود.این مشکلات مربوط به breaking changes، native module و تغییرات قالب است که درک آنها دشوار است.از آنجایی که ما rn-diff-purge into react-native upgrade را به عنوان بخشی از نسخه 0.59 قرار دادیم و Cocoapods رو به عنوان راه پیش فرض برای نصب native dependencies در ios ساختیم.ما همچنین در حال برنامه ریزی برای نوشتن جزئیات هر تغییر در پست های بلاگ هستیم و همچنین به دنبال راهی برای integrate این اطلاعات در CLI هستیم.ما یک بازرسی کامل از template انجام خواهیم داد تا ببینیم کدام بخش را میتوانیم به React Native برگردانیم تا ارتقاء را آسان تر کند.

Debugging exceptions

پیدا کردن ریشه اصلی یک مشکل اصلا کار آسانی نیست و من این مسئله رو اصلا دوست ندارم.stack trace در کنسول Chrome debugger معمولا محل اصلی مشکل را نشان نمی دهد که منجر به اشکال زدایی شود و از طرفی استفاده از omponentDidCatch کمکی به حل این مسئله نمی کند.

به طور شگفت انگیزی زمانی که ما() console.error در کد اضافه میکنیم میتوانیم یک stacktrace صحیح به دست آوریم و ریشه مشکل را پیدا کنیم.این کار بسیار ساده است و حتی در componentDidCatch قابل استفاده است.

facebook/react-native#16205
facebook/react-native#16661
Votes: 290
Tags: dx, debugging
Estimated time to fix: Continuous
(Point of contact: Christoph Nakazawa (@cpojer)

مهندسین فیسبوک :ما متوجه شدیم بسیاری از مشکلاتی که توسعه دهندگان با آن روبرو هستند گیج کننده است و به همین دلیل در گیت هاب وتوییتر برای اطلاعات بیشتری سوالاتی پرسیدیم تا یک دیدگاه خوبی نسبت به این مسئله داشته باشیم.ما نگاهی به issue های اصلی که توسعه دهندگان با آن روبرو هستد کردیم و در حال تلاش هستیم تا error messages ها را بهبود ببخشیم و داکیومنت را بازنویسی و کدها را تغییر بدهیم تا کمتر دچار error شوند.کار سختی است تا میران پیشرفت در این زمینه را اندازه گیری کنیم و بگوییم که در این زمینه پیشرفت کرده ایم.اما در مورد این مسئله مجدد از شما سوال خواهیم کرد.

Support of React Native team

خوشبختانه شاهد حضور بیشتر از تیم react-native در جامعه هستیم.

Votes: 240
Tags: communitySupport
Estimated time to fix: Continuous
(Point of contact: Christoph Nakazawa (@cpojer

مهندسین فیسبوک : همانطور که ممکن است دیده باشید،در چند ماه گذشته ما سرمایه گذاری زیادی در React Native community شروع کردیم.به طور مثال تعداد pull requests ها را به 70 عدد در مقایسه با 280 عدد در December از طریق merging و close کاهش داده ایم و به طور همزمان میانگین تعداد Pull Requests باز شده در روز از 3.5 به 7 افزایش یافته است.ما همچنین در حال برنامه ریزی برای جواب دادن سوالات باقیمانده تا 18–20 March هستیم .همچنین امیدواریم با بازنویسی documentation نحوه یادگرفتن و رفع خطا را آسان تر کنیم.

Performance, performance, performanc

اول از همه من یک کاربر اندروید هستم و از گوشی های قدیمی استفاده نمی کنم،از pixel2 استفاده می کنم که یکی از بهترین ها است.Startup time تفاوت بسیار زیادی بین pure native و RN است.نه تنها زمانی که اپلیکیشن را باز میکنید بلکه برای deep linking هم وجود دارد.زمانی که بر روی آیکون اپلیکیشن اندروید کلیک میکنید،RN خیلی آهسته است و مشا میتوانید از splash screen و موارد دیگه استفاده کنید اما به شما احساس native بودن را نمی دهد.

یکی از مشکلاتی که وجود دارد navigate بین صفحات است.من فکر میکنم به احتمال زیاد فیسبوک فقط از سیستم navigate خود استفاده می کند.بنابراین آنها نیازی به کمک یا سرمایه گذاری مشترک برای حل این مشکل ندارند.حیفه زمانی که برنامه Android یا ios توسعه می دهید نیاز به توجه به navigate ندارید چون اغلبا فقط کار میکند.

Votes: 232
Estimated time to fix: 2019

Point of contact: React Native team at Facebook

مهندسین فیسبوک :ما در حال حاضر بر روی تعداد زیادی تغییرات قابل توجه در React Native کار میکنیم.شما میتوانید اطلاعات بیشتر را در Fabric,TurboModules, Lean Core کسب کنید.در حالی که هیچ کدام از اینها به طور جداگانه به performace کمک نخواهند کرد،زمانی که ما تمامی این پروژه ها را کامل کنیم و انجام دهیم،معتقد هستیم React Native خیلی سریع تر خواهد شد و بیشتر احساس native بودن را منتقل خواهد کرد.نسخه 0.59 React Native با یک نسخه جدید از JSC در Androidارائه خواهد شد که به طور قابل توجهی سریعتر است.ما ویژگی بهینه سازی (“inline-requires” and “RAM bundles”) را فعال خواهیم کرد که نتیجه آن افزایش 10-30% speed-ups است همچنین بر روی یک سری ویژگی ها کار میکنیم که به زودی در مورد آن خواهید شنید.

The solution to lots of problems is rm everything and re-install

من فکر میکنم که documentation بهتری در مورد نحوه recover مشکلاتی که راه حل آن “fresh install” است وجود دارد.اکثر این مشکلات با دستوراتی مثل react-native nuke، پاک کردن watchman ،نصب مجدد node_modules و .. حل می شود.برای من کاملا روشن است که React Native پیچیده است و راه حل هایی مثل “fresh install” کد معادل “turn it off and on again” است.پیچیدگی مشکل نیست و شما به خوبی کار خود را انجام میدهید.من فکر میکنم که اگر دلیل اصلی را بهتر درک کنیم به مردم کمک میکنیم تا سریعتر مشکلات خود را حل کنند.

Votes: 168
?:Estimated time to fix
(Point of contact: Christoph Nakazawa (@cpojer

مهندسین فیسبوک :لطفا پاسخ های سوال یک و دو در مورد upgrading و debugging را بخوانید.

General Uncertainty. Lack of confidence

من از بعضی از مشتریانم جملاتی در باره پایداری React Native می شنوم.به نظر می رسد تصمیم گیرندگان در کمپانی ها بر روی React Native سرمایه گذاری می کنند.آن ها اطلاعاتی در مورد rewritten شنیده اند.به نظر می رسد پیام ها باید وضوح بیشتری داشته باشد.چیزی برای ایجاد اعتماد و اطمینان در مورد وضعیت موجود و پایداری طولانی مدت این پلتفرم.

Votes: 144
Estimated time to fix: continuous
Point of contact: React Native team at Facebook

مهندسین فیسبوک :ما شاهد استفاده بیشتر شرکت ها از React Native در مقایسه با 6 ماه سال گذشته بوده ایم.کمپانی های بزرگی مثل Microsoft, Amazon, Walmart, Uber, Pinterest, Zynga ، tons و بسیاری دیگر از React Native استفاده می کنند و آینده platform روشن است.ما اطلاعات بیشتری در مورد کار فیسبوک و دیگران برای React Native در جهت بهبود communication و کاهش عدم اطمینان در community به اشتراک خواهیم گذاشت.

Missing documentation

من اجساس میکنم بسیاری از ویژگی های React Native پنهان است که تنها در issue ها مستند شده است یا استفاده آن در کتابخانه های پیشرفته یافت می شود در حالی که نمیدانی این API رسمی و stable است. به عنوان یک نویسنده کتابخانه داکیومنت برای API ها میتواند خیلی مفید باشد.من فکر میکنم ScrollResponder، UIManager و غیره.حتی یک لینک ساده به implementation کد مفید خواهد بود،زیرا مرور کدبیس RN برای یک توسعه دهنده JS بسیار آسان نیست.

Votes: 141
Tags: dx, documentation
Estimated time to fix: 2019
Point of contact: React Native team at Facebook + Core Contributors

مهندسین فیسبوک :ما برای بازنویسی مجدد داکیومنت React Native در سال جدید برنامه ریزی کرده ایم و امیدواریم به طور قابل توجهی وب سایت ما برای استفاده آسان از React Native بهبود یابد.

Built in SVG Images

من میخواهم قادر به استفاده از SVG بدون تبدیل به font و راه حل های دیگه مثل webviews باشم.زمان استفاده از یک کد بین web react apps و native من باید تصاویر را به ویژه آن هایی که پویا هستند را تبدیل کنم.

Votes: 115
Estimated time to fix: done
Point of contact: React Native Communty

مهندسین فیسبوک : community پکیج های بسیار خوبی نوشته اند که SVGs را به صورت native رندر می کند.ما میخواهیم این پکیج ها را باز نویسی کنیم و بهبود ببخشیم و هیچ برنامه ای برای اضافه کردن به هسته React Native نداریم.پیشنهاد میکنیم از یکی از این پکیج ها استفاده کنید یا پکیج خودتون رو بسازید و برای استفاده دیگران به اشتراک بزارید.

Debugging

اشکال زدایی در Chrome با JS یک راه حل هوشمندانه اما خشن است.برای مثال نیاز به راه اندازی مجدد دارد و این مشکلاتی را با ماژول های native ایجاد می کند(مثلا react-native-gl شامل اپلیکیشنی که می خواهید آن را debug کنید،نمی شود) و برای مسائل اشکال زدایی مناسب نیست زیرا JS در حال اجرا با یک ماشین متفاوت است.در حالت ایده آل ، راهی برای اتصال مستقیم JS در حال اجرا بر روی device وجود خواهد داشت در حالی که هنوز از ابزارهای عالی اشکال زدایی در Chrome استفاده میکنید.

Votes: 109
?:Estimated time to fix
Point of contact: React Native team at Facebook

مهندسین فیسبوک : در ios باید امکان استفاده از Safari Dev Tools تا VM را به طور مستقیم اشکال زدایی کنیم.JSI based debugger بر روی کروم در حال حاضر در فیسبوک کار می کند.

Not resilient to crashes

موارد خیلی زیادی اتفاق افتاده است که من یک موردی را اشتباه انجام داده ام و اپلیکیشن crash کرده است(حداقل در Android) بدون اطلاعات زیادی در مورد علت این اتفاق.زمانی که این مشکل رخ می دهد adb logcat می تواند خیلی مفید باشد.

برای مثال:

  • استفاده از style = width:’100′ بدون گذاشتن %
  • استفاده از (</this.props.number && <View) در JSX زمانی که number=0
  • و احتمالا موارد خیلی زیادی که من نمیتونم به یاد بیارم.

من فکر میکنم React Native اگر در مقابل اینگونه مشکلات مقاومت بیشتری نشان بدهد و با نمایش پیغام error از crash اپلیکیشن جلوگیری کند.

Votes: 109
Tags: dx, debugging, crash
?:Estimated time to fix
(Point of contact: Christoph Nakazawa (@cpojer

مهندسین فیسبوک : ما به عنوان بخشی از مسئله Debugging در بالای این سند نگاهی خواهیم کرد

Documentation for library developers

در حال حاضر مستندات زیادی برای کمک به توسعه دهندگان کتابخانه در (introduction guides (iOS, Android وجود ندارد.

خوب است که مستنداتی کامل برای native API داشته باشید و دقیقا مشخص باشد که کدام کلاس ها و متد ها در دسترس و قابل استفاده هستند.این مستندات می تواند با استفاده از JavaDoc و AppleDoc. تهیه شود.

Votes: 106
Estimated time to fix: 2019
Point of contact: React Native team at Facebook

مهندسین فیسبوک : به عنوان بخشی از بازنویسی وب سایت و کار بر روی TurboModules به منظور بروزرسانی مستندات به توسعه native modules نگاهی خواهیم کرد.ما میخواهیم به community برای ساخت و نگهدای کتابخانه ها با کیفیت بالا کمک کنیم پس ما کار خودمان را در این زمینه انجام می دهیم تا مسیر برای توسعه دهنگان هموار باشد.

Warnings in Xcode

تعداد خیلی زیادی هشدار زمانی که react-native/ios را در Xcode باز میکنیم،به ما داده می شود.

Votes: 105
!Estimated time to fix: Done
(Point of contact: Héctor Ramos (@hramos

مهندسین فیسبوک : ما خلاص شدن از شر هشدار های موجود را شروع کرده ایم و آنها در master branch حل و فصل شده اند.در نسخه های بعدی React Native این هشدار ها از بین رفته اند.

Hot reloading

Hot reload با functional components به درستی کار نمی کند.خیلی عالی خواهد بود اگر هر تغییری بدون reload اپلیکیشن و نمایش splash screen نمایش داده شود. ابزارهایی مثل react-navigation persistance و storybook به بهتر شدن DX در restart کمک می کند اما داشتن یک functional hot reload بهترین گزینه خواهد بود.. آیا لازم نیست که یک پلاگین بابل برای تبدیل FC به کلاس در DEV ** ایجاد کنید؟

facebook/react-native#10991
https://facebook.github.io/react-native/docs/debugging
Votes: 99
Tags: docs-content, automatic-reloading, dx, hotreload
Estimated time to fix: ~1 month

(Point of contact: Dan Abramov (@gaearon

مهندسین فیسبوک : ما متوجه شدیم که مردم به صورت مداوم با این مشکل مواج هستند و امیدواریم در نهایت این مشکل را حل کنیم.


ObjC / Java vs Swift / Kotlin

من مطمئن هستم که نمیتوانم متوجه scale کار برای بازنویسی RN با این زبان ها باشم با این وجود من متوجه شدم که Swift و Kotlin بسیار دوستانه تر هستند با افرادی که با js کار میکنند.این میتواند منجر به مشارکت بیشتر و سفارشی سازی ماژول های native از طرف js دولوپر ها شود از آنجایی که منحنی یادگیری Swift / Kotlin شبیه ObjC / Java نیست.

از طرف دیگر انتخاب این ها به عنوان زبان اصلی با توجه به مستندات و repositories جدید باعث خواهد شد که به طور کلی ecosystem برای js دولوپر ها قابل درک تر باشد.

Votes: 97
Tags: dx
? : Estimated time to fix
Point of contact: React Native Community

مهندسین فیسبوک : در حال حاضر ما از Objective-C و Java برای codebases در فیسبوک استفاده می کنیم و نمیتوانیم از Swift یا Kotlin در اپلیکیشن هایمان استفاده کنیم.از آنجایی که فیسبوک React Native از master اجرا می کند،ما در حال حاضر نمی توانیم RN را با Swift و Kotlin بازنویسی کنیم.با کار بر روی Fabric در واقع ما بیشتر کد ها را از Objective-C و Java به ++c منتقل می کنیم و اعضای community علاقه خود را برای ساخت اپلیکیشن هایی با قالب های جایگزین که از Swift و Kotlin به جای Objective-C و Java ابراز می کنند.هیچ جدول زمانی برای این کار وجود ندارد.

Consistent KeyboardAvoidingView

تقریبا غیر ممکن است که بدانید چگونه KeyboardAvoidingView را تنظیم و پیکربندی کنید.بخشی از آن مربوط به مستندات چگونگی استفاده و رفتار آن بر اساس شرایط (در scrollView و…) است.

من فکر میکنم یک راه حل می تواند مستند سازی در مورد آن یا سازگاری با یک استراتژی مثل react-native-keyboard-aware-scroll-view باشد.

https://github.com/APSL/react-native-keyboard-aware-scroll-view

Votes: 78
?:Estimated time to fix
Point of contact: React Native Community

مهندسین فیسبوک : ما متوجه شدیم که این کامپوننت از کیفیت بالایی برخوردار نیست و issue های زیادی دارد.ما از این ماژول به طور گسترده تری در فیسبوک استفاده می کنیم و از یک ماژول third-party جدید که تمامی موارد در سرتاسر پلتفرم را پوشش دهد یا تغییرات بدون non-breaking به React Native تقدیر می کنیم.pull request خودتان را برای ما بفرستید!.

PRs

اغلب ما معتقد هستیم که فرستادن یک PR از باز کردن issue بهتر است.با این حال بسیاری از PR ها فقط برچسب گذاری شده و برای همیشه به فراموشی سپرده شده است و اینکار کمک مردم را متوقف می کند.

Votes: 70
Estimated time to fix: continuous
(Point of contact: Christoph Nakazawa (@cpojer

مهندسین فیسبوک : “Support of React Native team” را در بالاتر ببینید.تعداد pull requests ها را به 70 عدد در مقایسه با 280 عدد در December از طریق merging و close کاهش داده ایم و به طور همزمان میانگین تعداد Pull Requests باز شده در روز از 3.5 به 7 افزایش یافته است.ما همچنین در حال برنامه ریزی برای جواب دادن سوالات باقیمانده تا 18–20 March هستیم.

Android Inconsistencies

Android هنوز یک کلاس citizen دوم است.بسیاری از issue ها مربوط به Android است که در ios به خوبی کار میکند و توسعه دهندگان رمان توسعه نسخه android به مشکل می خوردند.

برای مثال:

  • استفاده از (</this.props.number && <View) در JSX زمانی که number=0 باعث crash شدن برنامه می شود.
  • در android تعریف یک property با نام flex باعث crash شدن برنامه می شود.

من مطمئن هستم که موارد خیلی زیاد دیگه ای وجود دارد و باید تمرکز بیشتری بر روی android انجام گیرد تا بتوان ادعا کرد که react native واقعا croos-platform است.

Votes: 69
?:Estimated time to fix
Point of contact: React Native team at Facebook

مهندسین فیسبوک : درست است.ما باید این مشکل را حل کنیم.Pull Requests از سمت community به ما کمک خواهد کرد.

Network request monitoring

در یک network requests خیلی سخت است یدون ابزارهای زیر یک درخواست و response آن را track کرد.

React native Debugger
Reactotron
Charles

facebook/react-native#934

Votes: 61
Tags: dx, debugging
:Estimated time to fix
Point of contact: React Native Community

مهندسین فیسبوک :این قطعا مهم است اما نیاز به کمک و کار community دارد.لطفا یک issue جدید برای مشخص شدن کارهایی که باد انجام شود،ایجاد کنید و سپس بر روی Pull Requests برای فعال شدن این قابلیت کار کنید.

Upgrade CameraRoll to use the iOS Photos Framework

CameraRoll فعلی بر پایه ALAssetsLibrary است که در نسخه 8 ios منسوخ شده است.این API نمی تواند به عکس هایی که در iCloud ذخیره شده است،دسترسی داشته باشد.این باعث می شود تا سردرگمی های زیادی برای توسعه دهندگان و مردم ایجاد شود.

facebook/react-native#21836
facebook/react-native#20462

Votes: 57
Tags: images, photos
!Estimated time to fix: Done
(Point of contact: Joshua Gross (@JoshuaGross

مهندسین فیسبوک : این مشکل در نسخه 0.59 React Native برطرف شده است.

Not keeping up with Android updates

من Android P دارم.(Border radius (ripple و سایر موارد به درستی کار نمی کنند.من متوجه نمی شوم که چگونه این مسئله در اولویت نیست.این قابل قبول نیست که شما یک گوشی جدید با سیستم عامل جدید دارد اما RN به درستی کار نمی کند .

برای مثال :

TouchableNativeFeedback’s ripples aren’t affected by borderRadius on Android 9

Votes: 57
**Estimated time to fix: ~**July 2019
Point of contact: David Vacca (@mdvacca) and React Native Community

مهندسین فیسبوک : ما رد حال ارتقا RN به Android X هستیم.

Native Navigation

من خیلی دوست دارم react-native-navigation به RN community منتقل، یا fork شود و از طریق تیم RN پشتیبانی و حمایت شود.

من احساس میکنم بعضی ها اهمیت ساخت native look را درک نمی کنند.من به upcoming JSI فکر میکنم،این می تواند یک بازیکن جدی در اکوسیستم ما باشد.

Votes: 56
:Estimated time to fix
Point of contact: React Native Community

مهندسین فیسبوک : ما سیستم native navigation خودمان را در فیسبوک داریم که open source نیست.بنابراین بهترین گزینه انتقال آن به open source نیست.اگر شما میخواهید پروژه های موجود را به React Native community منتقل کنید، لطفا از maintainers بخواهید و با آن ها یک discussion را شروع کنید.

react-native link issues

اجرا دستور react-native link میتواند یک کتابخانه یکسان را چندین بار link کند یا formatting آن را از بین ببرد.

Votes: 56
?:Estimated time to fix
Point of contact: React Native Community

مهندسین فیسبوک :ما در حال حاضر بر روی پیشنهاد CocoaPods پیش فرض برای پروژه های ios کار میکنیم و با آن میخواهیم link ساده با مشکلات کمتر برای مردم ایجاد کنیم.


Cross Device/Platform Push Notification Support

در حال حاضر شما از چندین کتابخانه متفاوت در پلتفرم برای ارسال نوتیفیکیشن استفاده می کنید.من یک راه سازگار با مستندات برای ارسال نوتیفیکشن بر روی همه device ها دوست دارم.

Votes: 55
:Estimated time to fix
Point of contact: React Native Community

مهندسین فیسبوک :این قطعا بخش مهمی از اپلیکیشن ها است و ما پیشنهاد میکنیم که community یک راه حل جامع که با React Native به راحتی integrated شود ، ارائه دهد.در حال حاضر ما به دنبال کاهش surface area هسته React Native هستیم که فعالیت و living جامعه بیشتر شود.

Support for more native components out of the box – Like camera, video, audio, fingerprint

کمبود خیلی از کامپوننت های native در هسته اصلی.همیشه ما باید از کتابخانه های ثالث برای دسترسی به ویژگی های native استفاده کنیم.خیلی بهتر خواهد بود که کامپوننت های native بیشتری در آینده در هسته وجود داشته باشد.

Votes: 50
Tags: SmallEcosystem
:Estimated time to fix
:Point of contact

مهندسین فیسبوک :در واقع ما در حال حرکت به سمت مخالف هستیم و در Lean Core به طور جدی در تلاش برای حذف component ها هستیم.ما متوجه شدیم که React Native برای کامپوننت های خارج از هسته مناسب تر است در حالی که این کامپوننت ها از حمایت بیشتری نسبت به کامپوننت های هسته React Native از طرف community برخوردار است.ما بر روی پیشنهاد CocoaPods پیش فرض برای پروژه های ios کار میکنیم تا link کتابخانه های جانبی ساده تر انجام گیرد.ما همچنین امیدواریم که مردم template هایی با ماژول های از پیش تعریف با قابلیت هایی که مردم به آن نیاز دارن، فراهم کنند .expo یا ignite برای شما مناسب خواهد بود

Automatic Scroll on addition of elements at index 0 of ScrollView / Flatlist

اضافه کردن پیام در هر دو طرف ScrollView/Flatlis نباید اسکرول اتوماتیک داشته باشد.باید یک prop با عنوان داشته باشد تا به توسعه دهندگان این اجازه را بدهد تا اسکرول خودکار را غیرفعال کنند.در حال حاضر برای ios در scrollView از maintainVisibleContentPosition پشتیبانی می شود.ما می توانیم برای اندروید یک راه حل مشابه به همراه مستندات داشته باشیم.

maintainVisibleContentPosition : زمانی که تنظیم می شود scroll view به موقعیتی scroll می شود که اولین فرزند در حال نمایش است یا در خارج minIndexForVisible اسکرول اتفاق نمی افتد.این برای فهرست هایی که در هر دو جهت بارگیری محتوا دارند،مثل صفحه چت که با ایجاد پیغام جدید اسکزول به آن موقعیت پانجلم شود، مناسب است.مقدار 0 عادی است اما مقدار 1 می تواند برای عدم نمایش spinner ها یا محتوایی که نباید position را حفظ کنند،استفاده شود.

Votes: 46

-:Estimated time to fix

Point of contact: React Native Community

مهندسین فیسبوک :به نظر می رسد که این درخواست یک ویژگی خاص است که بهترین روش مدیریت آن ارسال Pull Request است.اگر شما این ویژگی را دوست دارید،آن را بسازید.

Cocoapod support

Cocoapod به خوبی پشتیبانی نمی شود.زمانی که ارتقا اتفاق می افتد،دچار مشکل می شود.این مشکلات به طور منظم است که @orta یک پلاگین برای رفع مشکل خودکار issue های ریکت نیتیو طراحی کرده است:https://github.com/orta/cocoapods-fix-react-native.

Votes: 46

Tags: buildtools

?:Estimated time to fix

Point of contact: React Native Community

مهندسین فیسبوک :ما در حال حضر بر روی بهتر شدن پشتیبانی CocoaPods درون React Native به طور پیش فرض کار می کنیم و ما قبلا چندین pull requests در این زمینه داشتیم ایم.با ما در ارتباط باشید.

Outdated dependencies

یک مثال می تواند ws باشد که در حال حاضر 1.1.5 است اما باید حداقل 3.3.1 باشد بر اساس این لیست.

Votes: 45

Estimated time to fix: In progress

(Point of contact: Christoph Nakazawa (@cpojer

مهندسین فیسبوک :این dependency خاص در حال حاضر به عنوان بخشی از Lean Core ارتقا یافته است و ما در حال تلاش برای ارتقا dependencies های خودمان هستیم.

Unwelcoming first experience

برای مثال :

react-native init demo
cd demo
vim index.test.js


describe('Test', () => {
it('should be true' () => {
expect(true).toBe(true)
})
})


&gt; npm test
Test suite failed to run
Couldn't find preset "module:metro-react-native-babel-preset" relative to directory "~/projects/demo"


این اولین باری نیست که ما یک public release داریم که بعضی چیزها به درستی کار نمی کند و خارج از box است.من متوجه شدم که این یک چالش بزرگ برای ساختن کتابخانه های متفاوت است و این ورژن با یکدیگر کار می کند و اما زمانی که می خواهید کارهای ساده انجام بدهید،ناامید کننده است.

معمولا،این فرآیند نیاز به گوگل در مورد راه حل های این مشکلات است.معمولا منجر به issue در گیت هاب React Native می شود.مرور کامنت ها به تلاش های متفاوت برای حل مشکل انجام می شود.ارزشمند است که مستنداتی با معیار شناخته شده و دانش جمع آوری شده در مورد چگونگی حل مشکل وجود داشته باشد.

Votes: 41

?:Estimated time to fix

Point of contact: React Native team at Facebook + React Native Community

مهندسین فیسبوک :این در واقع یک مشکل بزرگ است و ما در حال کارکردن برای بهترشدن یا تست سک استراتژی در releases های جدید هستیم تا مردم زمان run به این نوع مشکلات بر نخورند.


Developer Experience

من فکر میکنم ما باید بیشر به ابزارها توجه کنیم و سعی کنیم آن ها را بیشتر سرگرم کننده و دلپذیر برای کار کنیم.در حال حاضر آن ها بسیار خام هستند و اغلب خطاها را چاپ می کنند.ساختن آنها به صورت تعاملی و شفاف موجب می شود تا احساسات پایدارتری داشته باشید.

Votes: 40

-:Estimated time to fix

-:Point of contact

مهندسین فیسبوک :سوالات و مستندات این مقاله را ببینید.بعد از انجام این کارها تجربه توسعه بهبود خواهد یافت.

Styling Shadows on Android

Shadows در اندروید از طریق elevation مدیریت می شود، بنابراین در کدتان شما باید خط های بیشتری برای مدیریت shadows در اندروید اضافه کنید.من احساس می کنم استفاده از shadow CSS properties پیاده سازی shadows ها را راحتتر کند .

Votes: 40

-:Estimated time to fix

-:Point of contact

مهندسین فیسبوک :به نظر می رسد که این یک مسئله خاص است و بهتر است GitHub issue یا GitHub PR مدیریت شود.لطفا در اینجا در این مورد بحث کنید.

Official Camera Module

من از کتابخانه های متفاوت camera استفاده می کنم که هر یک issue هایی را دارند.من فکر می کنم این یک ماژول مورد نیاز برای هر فریمورک توسعه اپلیکیشن است.

Votes: 39

-:Estimated time to fix

-:Point of contact

مهندسین فیسبوک:ما در حال حاضر برنامه ای برای اضافه کردن ماژول camera به React Native نداریم.لطفا از react-native-camera به عنوان جایگزین استفاده کنید.

Support developers who want to help build react-native itself

همانطور که مشاهده میکنید صدها نفر از مردم هستند که تمایل دارند React Native را از آن چیزی که هست بهتر کنند.از آنجایی که بدیهی اس تیم فیسبوک ظرفیت محدودی دارد،مشارکت های community باید توسط تیم اصلی ارزیابی شود.من می دانم که آن ها ارزش دارد و شما کارهای زیادی انجام می دهید تا بتوانید react native را برای همه ی ما open کنید.خیلی از ما میتوانیم مشکلاتی که در این thread بیان شده است را حل کنیم.

همانطور که می بیند صدها issue و PR باز است.به عنوان کسی که از react native سال ها است استفاده می کنم،من دوست دارم کمک کنم.اما برای این کار ما نیاز به درک مستنداتی رسمی از معماری داخلی React Native هستیم.

Votes: 38

-:Estimated time to fix

-:Point of contact

مهندسین فیسبوک:لطفا issue های بالا را که در موردش بحث کردیم را ببیند که چگونه پاسخگویی ما به Pull Request در چند ماه گذشته بهتر شده است.ما مشتاقانه منتظر Pull Request های شما هستیم و خیلی سریعتر از قبل از آن استفاده می کنیم.

Accessibility and Internationalization

در لینک زیر بعضی issue ها به نحوی تند و تهاجمی قرار گرفته است:

http://www.takingnotes.co/blog/2018/11/09/react-native-accessibility/.

این به خصوص برای من غم انگیز است زیرا NavigatorIOS و TabBariOS که Accessibility و Internationalization عالی داشتند،منسوخ شده است.من می دانم که تیم React Native با کارهایی که انجام دادند Accessibility و Internationalization برایشان مهم است(https://facebook.github.io/react-native/docs/accessibility).با این وجود من بهبود را نمیبینم تا زمانی که Navigation Container در هسته pull شود(Navigation Controller, TabBar, etc.).

Votes: 37

Tags: right-to-left-rtl-layout-support, nuanced-platform-specific-behavior, Accessibility, Internationalization, native-navigation-api

-:Estimated time to fix

Point of contact: React Native Community

مهندسین فیسبوک: این موضوع بسیار مهم است که باید مورد توجه قرار بگیرد.اخیرا ما دو RFCs درباره accessibility ادغام(merge) کرده ایم:Actions و Roles اما نیاز به مشارکت شما برای بهبود و بهتر شدن accessibility در React Native دارد.

Better Triaging of Github Issues

به غیر از مسائل فنی ذکر شده در اینجا،اولین چیزی که من را در استفاده از React Native در پروژه ها دور کرد،وضعیت issue ها در React Native بود.issue های زیادی وجود داشت که من پیدا کرده بودم که توسط یک ربات یا فردی از تیم بسته شده بود.همه آنها برطرف نشده بودند و بعضی از آن ها غیر قابلتحمل بود.

باید یک راه بهتر برای استفاده از مشارکت community برای حل issue ها وجود داشته باشد.در اینجا بسیاری از نظران وجود دارد که بدون حل شدن یک issue بسته شده است.بنابراین تعجب آور نیست که آن ها در اینجا ذکر شده اند.

من معتقدم که اولین گام روشن در این زمینه باز شدن issue های قدیمی است که حل نشدند.پس از ما میتوانیم بر روی فرآیند حل یک issue کار کنیم.این در نهایت منجر به مشارکت کدهای community می شود.

Votes: 35

Estimated time to fix: continuous

Point of contact: Christoph Nakazawa (@cpojer) and Héctor Ramos (@hramos) and the React Native Community

مهندسین فیسبوک:ما یک جلسه triage session در 8-10 مارچ اجرا خواهیم کرد و امیدواریم issue tracke ما را به یک کشور قابل کنترل تر تبدیل کند.ما از community می خواهیم که با triaging و ارسال Pull Requests مسائل و مشکلاتی که با آن درگیر هستند،به ما کمک کنند.

No True Multi-Threading / Javascript Based Background Services

من دوست دارم یک تلاش دیگر در زمینه همگام سازی multi-threading با background services ببینم.این امر بسیار سودمند خواهد بود که قادر به نوشتن service ها با جاوا اسکریپت باشیم بر خلاف استفاده از bridge برای برقراری ارتباط بین یک ماژول native که یک native service را مدیریت می کند.

چندین تلاش در پکیج هایی مثل React Native Background Task وجود دارد اما به خوبی برای cross-platform کار نمی کند.من دوست دارم یک پیاده سازی درست از این در react native ببینم.

برای مثال:

توسعه دهندگان قصد دارند یک اپلیکیشن fitness بسازند.این اپلیکیشن نیاز دارد قادر به track تغییرات location، سرعت و غیره باشد.بهترین حالت این است که اپلیکیشن در background در حال اجرا باشد و فعالیت های کاربر را track کند بدون اینکه اپلیکیشن در background باز باشد.

Votes: 33

-:Estimated time to fix

-:Point of contact

مهندسین فیسبوک:این باید در یک issue مجزا دیگر بررسی شود چون به یک مشکا فنی مشخص مربوط می شود.

Precompiled RN in iOS

در حالی که در android به طور پیشفرض precompiled aar را load میکند،در ios معادل آن وجود ندارد از این رو زمان build بسیار طولانی است.پشتیبانی از precompiled RN در ios باعث افزایش زیاد سرعت build خواهد شد.

Votes: 31

-:Estimated time to fix

-:Point of contact

مهندسین فیسبوک:این باید در یک issue مجزا دیگر بررسی شود چون به یک مشکا فنی مشخص مربوط می شود.

Windows and Linux are second class citizens

تجربه توسعه در این سیستم عامل ها ترسناک است.به نظر می رسد فایل های watchers تغییراتی را به فایل ها اغلب وارد نمی کنند.بدتر ازهمه hot reloading اغلب فقط یکبار یا پنج بار کار میکند و بعد از آن به طور کامل از کار می افتد و من مجبور خواهم بود که مجدد bundler را restart کنم.

من قبلا با MacBook برنامه هایم را توسعه میدادم.با اینکه macOS را دوست ندارم ولی hot reloading بصورت کامل و 100 درصدی کار میکرد بدون اینکه مجدد bundler را restart کنم.

اگرچه من انتظار ندارم ios را بدون MacOS توسعه بدهم(چون اپل اجازه نمی دهد)ولی اگر React Native واقعا cross-platform است باید فیسبوک بر روی سیستم عامل های ویندوز و لینوکس کار کند.

Votes: 30

?:Estimated time to fix

Point of contact: React Native Community

مهندسین فیسبوک:این قطعا یک مشکل مهم است که باید حل شود اما نیاز به کمک community برای شناسایی مسائل بنیادی برای حل این مشکل دارد.اگر مسائلی که باعث به وجود آمدن این مشکل شده است را پیدا کرده اید،برای ما بفرستید.

Everything that’s not React

به عنوان یک توسعه دهنده جاوا اسکریپت من هرگز قبلا Xcode و Android Studio رو ندیده بودم.من احساس میکنم که بیشتر زمان توسعه صرف مشکلات Xcode/Android studios می شود.دستور react-native link با همه کتابخانه ها سازگار نیست و شما باید کارهای عجیب و غریب انجام دهید.من اخیرا برای ارتقا build.gradle مجبور شدم یک فایل موجود در پوشه node_module را تغییر بدهم.

Votes: 30

?:Estimated time to fix

Point of contact: React Native Community

مهندسین فیسبوک:ما در این زمینه به نحوه های مختلفی پاسخ می دهیم.همانطور که میتوانید از پاسخ های ما در دیدگاه های قبلی،این موشع را مشاهده کنید.سعی می کنیم با بهبود مستندات این کارها را آسان تر کنیم.

Inconsistent EcmaScript features between Android/iOS

اندروید چیزهایی مانند Proxy را ندارد بنابراین کتابخانه های مثل mobx (version 5) or oc-typescript و غیره کار نمی کند.اولین چیزی که من با پروژه جدید React Native انجام می دهم جایگزین کردن avaScriptCore با نسخه جدیدتر Android است.من فکر می کنم که همه چیز در مورد این مسئله است، محدودیت هر سیستم عامل و غیره می تواند یک گام خوب در پیش رو باشد.

Votes: 29

!Estimated time to fix: Done

-:Point of contact

مهندسین فیسبوک:در نسخه 0.59 React Native ما سرانجام یک نسخه جدید از JSC در اندروید با مشارکت community عرضه می کنیم.

Real time crash and performance monitoring tool

ابزاری رسمی برای مانیتورینگ real-time crash وجود ندارد.ما ابزار هایی مثل Newrelic mobile, react-native-sentry, bugsnag داریم اما همه موارد را حل نمی کنند.

Votes: 28

-:Estimated time to fix

-:Point of contact

مهندسین فیسبوک:این واقعا بسیار مهم است اما نباید بخشی از هسته React Native باشد.راه حل های مشخص شده همه ابزارهای بسیار خوبی هستند و امیدواریم بتوانیم آن ها را بهبود ببخشیم تا موارد استفاده بیشتری را پوشش دهند.

A lot of issues while using inverted lists

لیست های معکوس UX معمولی برای انواع مختلف برنامه ها با قابلیت چت هستند.اما اجرای فعلی لیست معکوس دارای مسائل زیادی و برخی از ویژگی های از دست رفته است.

بعضی از issue ها:

facebook/react-native#21126

facebook/react-native#18945

facebook/react-native#18943

facebook/react-native#17553

Votes: 27

Tags: flatlist, inverted, sectionlist, lists

?:Estimated time to fix

Point of contact: React Native Community

مهندسین فیسبوک:این در واقع یک مشکل است که بسیاری از مردم با آن روبرو هستند.این بهتر است در Pull Request ها به کار برده شود اما قطعا یک مشکل سخت فنی است که راه حل آن ساده نیست.

Orientation changes & landscape

این موضوع دیگری است که در RN به صورت کلی نادیده گرفته شده است.ما فقط یک راه حل نداریم.اکثر اپلیکیشن های RN فقط در حالت orientation to portrait قفل می کند.چیزی که در دنیای تلفن همراه توصیه نمی شود

Votes: 23

?:Estimated time to fix

Point of contact: React Native Community

مهندسین فیسبوک: این یک مشکل فنی بنیادی است که بهتر است با Pull Request به بحث گذاشته شود.

Official Camera && Video && Audio Modules

من آرزو دارم که یک پشتیبانی رسمی برای مدیریت multi media بصورت cross platform با قابلیت ذخیره سازی وجود داشته باشد.

Votes: 23

-:Estimated time to fix

-:Point of contact

مهندسین فیسبوک:لطفا از react-native-camera و react-native-video استفاده کنید.مابه دنبال اضافه کردن کامپوننت های به هسته ReactNative نیستیم.

Lack of Documentation Around Breaking Changes

زمانی که ارتقا بین نسخه ها اتفاق می افتد شامل ورژن minor/patch هیچ مستند سازی در مورد آن انجام نمی گیرد(برای مثال: this CLI argument change that broke the Storybook packager script) و یا بدون توصیف واقعی از اینکه چه چیزی تغییر پیدا کرده است و یا چگونه migrate شده است(به عنوان مثال سوئیچ به babel7).

تصمیم به ارتقا dependencies در نسخه های جزئی گام بسیار خوبی در مسیر درست است اما برخی اسناد در مورد نحوه تغییر زمانی که 0.58 به صورت جزئی تغییر میکند،می تواند خوب باشد.

Votes: 22

-:time to fix

-:Point of contact

مهندسین فیسبوک:اولین پاسخ در این مقاله را مشاهده کنید.ما در تلاش برای بهبود تغییرات در نسخه های آینده هستیم و امیدواریم اینگونه مشکلات حل شوند.

Performant list and input

فلت لیست و TextInput فاقد مدیریت حافظه هستند و باید سریعتر باشند.این ویدئو شگفت انگیز در Chain React 2018 رو ببینید:https://youtu.be/83ffAY-CmL4