Pengetahuan dan kondisi

Inti dari setiap situs web modern atau aplikasi peramban (SPA itu, PWA itu, bahwa tiga huruf lainnya) adalah Negara bagiannya, atau negara bagian.


Kita dapat berdebat sebanyak yang kita suka tentang apa yang lebih baik - Bereaksi, Vue, Svelte, Angular, kita dapat terus menggunakan jQuery, tetapi pada kenyataannya itu tidak begitu penting. Ini adalah bagian dari aplikasi kita yang kita lihat - "otot" dan "kulitnya". Tetapi cara Anda berpikir - dengan istilah apa Anda beroperasi, mekanisme apa yang Anda gunakan untuk memvisualisasikan di kepala Anda bagaimana data "mengalir" dalam aplikasi Anda - semua ini berasal dari kerangka kerjanya. Dari manajer negara.


Ingat, beberapa tahun yang lalu, kami bosan dengan JavaScript ? Sekarang saya melihat sejumlah besar orang bosan dengan manajer negara. Redux? Ya , ya dan ya . RxJS? Juga . MobX? Jika begitu sederhana - sial, mengapa ia memiliki halaman trap.html dalam dokumentasi ?


Jawaban "mengapa begitu sulit bagi banyak orang" adalah, tetapi pertama-tama Anda perlu merumuskan masalah secara akurat.


Memilih palungan negara - kami memilih cara berpikir. Ada banyak pilihan sekarang, tetapi pendekatan yang paling populer jatuh ke dalam 3 kelompok:


  • Flux / Redux-like : repositori global dengan aksi dan reduksi. Ada cukup banyak dari mereka, tapi saya akan menyebutkan Redux , Efektor , Storeon , tak tertulis , dan Reatom sendiri . Ini bukan "yang terbaik dari yang terbaik," melainkan "yang paling beragam." Semua solusi dari daftar membawa sesuatu yang unik dan tidak biasa, dan Anda dapat mengambil berbagai ide menarik darinya.


    Pendekatan ini terutama sangat penting (Thuring-complete) dan global .


  • Diobservasi dan pipa. Solusi paling populer saat ini dalam grup ini adalah RxJS dan MobX . Yang kurang dikenal - Kefir , Bacon , CycleJS . Omong -omong, omong-omong, juga termasuk dalam daftar ini. Mereka semua sangat berbeda dari sudut pandang pengalaman pengembang, tetapi dari sudut pandang fundamental mereka berbeda hanya dalam satu cara: MobX, Svelte dan lainnya dapat dijelaskan dari sudut pandang topologi oleh grafik "apa yang memicu apa", tetapi RxJS tidak, grafik tautannya multidimensi dan "loop aneh" dapat muncul di dalamnyamentransmisikan diamati dalam diamati. Ini membuatnya lebih kuat di satu sisi, dan lebih kompleks di sisi lain. Kisah yang serupa dengan naskahnya. Mereka menemukan bahwa sistem tipenya adalah Thuring-complete. Satu-satunya hal yang mengikuti adalah bahwa ia dapat membeku pada langkah verifikasi, dan mereka menambahkan batas waktu pada pekerjaan.


    Ini mungkin terdengar agak aneh, tetapi secara umum kelas solusi ini cenderung bersifat lokal, atau ad-hoc dan deklaratif - tetapi tanpa memotong kemampuan untuk menggunakan logika sewenang-wenang.


    , - , , , , “” . , Lodash, Ramda, io-ts. - LISP JS, — -- “”, , .


  • GraphQL . Apollo Relay — , . Falcor — GraphQL Netflix, GunDB PouchDB. , Redux, MobX, RxJS . “” GraphQL. , . 100% ( )



, . — , ; , - . .


FluxGraphQL
Observables?????

: “” “” 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 , ( ), . , . .


Setiap interaksi antara kedua dunia harus eksplisit, langsung dibedakan dalam kode, agar tidak terjadi secara kebetulan selama tinjauan kode, dan yang paling penting - terjadi di userland, dan bukan di perpustakaan.


Anda seharusnya tidak memilih solusi spesifik, tetapi untuk proyek baru saya, saya akan menggunakan GraphQL + Apollo untuk menyimpan pengetahuan , dan untuk manajemen negara - Xstate + RxJS, untungnya, mereka berteman satu sama lain .


Berhentilah khawatir tentang menjejalkan semuanya menjadi satu solusi. Kamu tidak membutuhkannya.


All Articles