Connaissance et condition

Le cƓur de tout site Web ou application de navigateur moderne (ce SPA, cette PWA, ces trois autres lettres) est son État ou son État.


Nous pouvons discuter arbitrairement de ce qui est le mieux - React, Vue, Svelte, Angular, nous pouvons continuer Ă  utiliser jQuery, mais en rĂ©alitĂ© ce n'est pas si important. C'est la partie de notre application que nous voyons - ses «muscles» et sa «peau». Mais la façon dont vous pensez - avec quels termes vous utilisez, quelle mĂ©canique vous utilisez pour mĂȘme visualiser dans votre tĂȘte comment les donnĂ©es "circulent" dans votre application - tout cela vient de son squelette. Du directeur de l'État.


Rappelez-vous, il y a quelques annĂ©es, nous Ă©tions fatiguĂ©s de JavaScript ? Maintenant, je vois un grand nombre de personnes se lasser des chefs d'État. Redux? Oui , oui et oui . RxJS? Trop . MobX? Si c'est si simple - bon sang, pourquoi a-t-il une page trap.html dans la documentation ?


La réponse «pourquoi est-ce si difficile pour beaucoup» est, mais vous devez d'abord formuler avec précision le problÚme.


Choisir un chef d'État - nous choisissons une façon de penser. Il existe maintenant de nombreuses options, mais les approches les plus populaires se rĂ©partissent en 3 groupes:


  • Flux / Redux-like : un rĂ©fĂ©rentiel global avec des actions et des rĂ©ducteurs. Il y en a beaucoup, mais je mentionnerais Redux , Effector , Storeon , Unstated et Reatom moi-mĂȘme . Ce ne sont pas «les meilleurs des meilleurs», mais plutĂŽt les «plus diversifiĂ©s». Toutes les solutions de la liste comportent quelque chose d'unique et d'inhabituel, et vous pouvez en tirer diverses idĂ©es intĂ©ressantes.


    Cette approche est avant tout impérative (Thuring-complete) et globale .


  • Observables et tuyaux. Les solutions les plus populaires aujourd'hui dans ce groupe sont RxJS et MobX . Des moins connus - KĂ©fir , Bacon , CycleJS . Svelte , d'ailleurs, tombe Ă©galement dans cette liste. Ils sont tous trĂšs diffĂ©rents en termes d'expĂ©rience de dĂ©veloppement, mais d'un point de vue fondamental, ils ne diffĂšrent que par une chose: MobX, Svelte et d'autres peuvent ĂȘtre dĂ©crits en termes de topologie par le graphique habituel «ce qui dĂ©clenche quoi», mais RxJS ne l'est pas, son graphique est des boucles multidimensionnelles et «étranges» peuvent y apparaĂźtretransmettre des observables en observables. Cela le rend plus puissant d'une part, et plus complexe de l'autre. Une histoire similaire Ă©tait avec le script. Ils ont dĂ©couvert que son systĂšme de caractĂšres est Thuring-complete. La seule chose qui a suivi, c'est qu'il pouvait geler Ă  l'Ă©tape de vĂ©rification, et ils ont ajoutĂ© une limite de temps au travail.


    Cela peut sembler plutĂŽt Ă©trange, mais en gĂ©nĂ©ral, cette classe de solutions a tendance Ă  ĂȘtre locale, ou ad hoc et dĂ©clarative - mais sans couper la possibilitĂ© d'utiliser une logique arbitraire.


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


Toute interaction entre les deux mondes doit ĂȘtre explicite, directement distinguĂ©e dans le code, afin de ne pas se produire par hasard lors de la rĂ©vision du code, et surtout - de se produire dans l'espace utilisateur et non dans les bibliothĂšques.


Vous ne devriez pas choisir des solutions spécifiques, mais pour mon nouveau projet, j'utiliserais GraphQL + Apollo pour stocker des connaissances et pour la gestion des états - Xstate + RxJS, heureusement, ils sont amis entre eux .


ArrĂȘtez de vous soucier de tout ranger dans une seule solution. Tu n'en a pas besoin.


All Articles