إن جوهر أي موقع حديث أو تطبيق متصفح (مثل SPA ، أو سلطة المياه الفلسطينية ، أو أي حروف ثلاثة أخرى) هي دولتها ، أو ولايتها.
يمكننا أن نتجادل بشكل تعسفي حول أيهما أفضل - رد فعل ، Vue ، Svelte ، Angular ، يمكننا الاستمرار في استخدام jQuery ، ولكن في الواقع ليس مهمًا جدًا. هذا هو جزء من تطبيقنا الذي نراه - "عضلاته" و "جلده". ولكن الطريقة التي تفكر بها - بأي مصطلحات تعمل ، وما هي الآليات التي تستخدمها حتى لتصور في ذهنك كيف "تتدفق" البيانات في تطبيقك - كل هذا يأتي من هيكله. من مدير الدولة.
تذكر ، قبل عامين ، سئمنا جافا سكريبت ؟ الآن أرى عددًا كبيرًا من الناس قد تعبوا من مدراء الدولة. إعادة؟ نعم ، نعم و نعم . RxJS؟ جدا . MobX؟ إذا كان الأمر بسيطًا جدًا - اللعنة ، فلماذا يحتوي على صفحة trap.html في الوثائق ؟
الجواب "لماذا هو صعب للغاية بالنسبة للكثيرين" ، ولكن عليك أولاً صياغة المشكلة بدقة.
اختيار مدير الدولة - نختار طريقة التفكير. هناك العديد من الخيارات الآن ، ولكن المقاربات الأكثر شيوعًا تنقسم إلى 3 مجموعات:
Flux / Redux-like : مستودع عالمي مع الإجراءات والمخفضات. هناك الكثير جدا منها، ولكن أود أن أذكر مسترجع ، المستجيب ، Storeon ، غير المعلنة ، و Reatom نفسي . هذه ليست "أفضل الأفضل" ، بل "الأكثر تنوعًا". جميع الحلول من القائمة تحمل شيئًا فريدًا وغير عادي ، ويمكنك الحصول على العديد من الأفكار المثيرة للاهتمام منها.
هذا النهج أمر حتمي في المقام الأول (Thuring-Complete) وعالمي .
المرصدات والأنابيب. الحلول الأكثر شعبية اليوم في هذه المجموعة هي RxJS و MobX . من الأقل شهرة - Kefir ، لحم الخنزير المقدد ، CycleJS . بالمناسبة ، يقع Svelte في هذه القائمة. جميعهم مختلفون للغاية من حيث تجربة المطور ، ولكن من وجهة نظر أساسية ، فإنهم يختلفون فقط في شيء واحد: MobX ، Svelte ، وغيرها يمكن وصفها من حيث الطوبولوجيا عن طريق الرسم البياني المعتاد "ما الذي يحفز ما" ، ولكن RxJS ليس ، الرسم البياني هو قد تظهر فيه حلقات متعددة الأبعاد و "غريبة"يحيل المرصد في المرصد. وهذا يجعلها أكثر قوة من ناحية ، وأكثر تعقيدًا من ناحية أخرى. كانت قصة مماثلة مع النص. اكتشفوا أن نظام نوعه مكتمل. الشيء الوحيد الذي تبع ذلك هو أنه يمكن أن يتجمد في خطوة التحقق ، وأضافوا حدًا زمنيًا للعمل.
قد يبدو هذا غريبا نوعا ما، ولكن بصفة عامة هذا النوع من الحلول يميل إلى أن يكون المحلية، أو مخصصة و التعريفي - ولكن من دون قطع القدرة على استخدام المنطق التعسفي.
, - , , , , “” . , Lodash, Ramda, io-ts. - LISP JS, — -- “”, , .
GraphQL . Apollo Relay — , . Falcor — GraphQL Netflix, GunDB PouchDB. , Redux, MobX, RxJS . “” GraphQL. , . 100% ( )
, . — , ; , - . .
: “” “” 100% : redux- , , RxJS — . JS , , .
: - ID ID, — . (), — .
. - . , , , "state of js” .
.
.
, , . , — , . , .
— , , . , , — GraphQL . , , .
, - .
SPA , : , , SQL- ; .
Rails, , .
, , ( ) — API , .
:
- : . , , , .
- : statechart. — . — observables (RxJava, RxRuby, RxSwift, RxBrainfuck — ) . — - , , - .
. , , . — . , , , , — . , , - . — , .
— - , . - , . — , , , .
. , , , corrupted. : , DTO. . — LISP-. : , .
— . , — , , , — - , . , , . : - — , . , , CRDT-. — .
:
.
— , , — , , . , . , , . await getBlogPost(id)
, : @gql("blogPost(id){...}") class extends Component
, — , .
. . ImmutableJS, Object.freeze, readonly Record & Tuple stage 1 proposal. . - shared worker.
, — , . XState , ( ), . , . .
يجب أن يكون أي تفاعل بين العالمين صريحًا ومميزًا بشكل مباشر في الشفرة ، حتى لا يحدث عن طريق الصدفة أثناء مراجعة الشفرة ، والأهم من ذلك - أن يحدث في أرض المستخدم ، وليس في المكتبات.
لا يجب عليك اختيار حلول محددة ، ولكن بالنسبة لمشروعي الجديد ، سأستخدم GraphQL + Apollo لتخزين المعرفة ، ولإدارة الدولة - Xstate + RxJS ، لحسن الحظ ، هم أصدقاء مع بعضهم البعض .
توقف عن القلق بشأن حشو كل شيء في حل واحد. انت لست بحاجة اليه.