mr_hqq
mr_hqq
خواندن ۳ دقیقه·۵ سال پیش

react native subscription و EVENT EMITTER


سلام به همه

این چیزی که می خوام براتون توضیح بدم graphql Client تو react native ه

حدود یه سالیه دارم با graphql دسته و پنجه نرم می کنم

چهار تا تابع داره که کار با همشون یکم سختی خودش رو داره


اول بذارین یه نگاه کلی به graph بنداریم

گراف‌کیوال (GraphQL‎) یک زبان پرسمان به طور داخلی توسعه‌داده شده توسط فیس‌بوک در ۲۰۱۲ پیش از انتشار عمومی در ۲۰۱۵ است که یک جایگزین به معماری‌های REST و خدمات وب تک‌کاره ارائه می‌دهد و اجازه می‌دهد که کلاینت ها ساختار دادهٔ موردنیاز را تعریف کنند و ساختار دقیقاً مشابه توسط کارساز بازگردانی می‌شود. ساختار زمان اجرای آن سختگیر در نوع است که اجازه می‌دهد کلاینت ها مشخص کنند که چه داده‌ای مورد نیاز است. این ساختار از مشکلات واکشی بیشتر و همچنین واکشی کمتر داده‌ها جلوگیری می‌کند. گرف‌کیوال در زبان‌های مختلفی پیاده‌سازی شده است، از جمله جاوااسکریپت، پایتون، روبی، جاوا، سی‌شارپ، اسکالا، گو، الیکسر، ارلنگ، پی‌اچ‌پی، و کلوژر.(کپی از ویکی پدیا)

mutation: این تابع برای ارسال دیتا استفاده میشه و تقریبا کار POST رو تو REST انجام میده

query: تابعی هست که برای گرفتن دیتا استفاده میشه و کار get رو انجام میده

این دو تا معمولا تابع پرکاربرد graph هستن

چیزی که می خوام بگم از subscription هست

بذارین اول بگیم این غول بی شاخ و دم چی هست اصلا...

این بزرگوار یه بخش از همین graphql هست که بهتون قابلیت real time میده

کسایی که سوکت کار کردن می دونن real time چیه و یعنی شما بخواین یه داده رو مثلا بدون refresh صفحه وب یا reload کردن یه اپ بتونین دریافت کنین یا همون سیستمی که تو پیام رسان ها استفاده می کنن که subscription هم این قابلیت رو دقیقا بهتون میده

بذارین بهتون داستان مشکلم بگم؛

تو یه پروژه ای ما باید سیستم پیام رسان درست می کردیم..

رسیدیم به این موضوع که دو بخش باید پیام ها دریافت می شد و دو تا صفحه جدا بود یکی صفحه پیام ها که لیست تمام کسایی بود که پیام ارسال می کردن یه صفحه هم نمایش پیام ها بود

ما برای این که لیست اشخاص رو داشته باشیم اومده بودیم pulling میزدیم رو لیست پیام ها به جای اینکه real time کنیم و من با این موضوع اصلا نتونستم کنار بیام در صورتی که که پروژه تموم شده بود و تحویل داده بودیمش رفتم دنبال راه حل تا این که به یه package آشنا شدم

از اونجایی که من چند سالی C# کار می کردم و با event و delegate آشنا بودم گفتم حتما تو javascript هم باید چنین چیزی وجو داشته باشه یا اگرم نبود باید پیادش کنم اما تو جستجو هام پیداش کردم

اسمش eventEmitter ه

این package به این شکل عمل می کنه که شما یه fetch یا function تو یه صفحه دیگه دارین و می خواین بدون اینکه تو یه صفحه دیگه تعریفش کنین اطلاعاتش رو بگیرین بهتون کمک می کنه

حالا چطور تو subscription تعریفش کنیم

شما در subscription، event های مختلف دارین مثل:

onConnected

onConnecting

و ...

اما event اصلیش از تابع subscribe میاد که بعدش next میاد و خروجی بهتون میده

حالا چطور استفاده کنیم




فراخونی می کنین



داده رو ارسال می کنین


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

همین

امیدوارم خوشتون بیاد...







react nativereactnativeapollo clientsubscriptionevent emiiter
یه برنامه نویس معمولی اما با تجربه
شاید از این پست‌ها خوشتان بیاید