Conhecimento e condição

O coração de qualquer site ou aplicativo de navegador moderno (aquele SPA, aquele PWA, outras três letras) é o seu estado ou estado.


Podemos discutir arbitrariamente sobre o que é melhor - React, Vue, Svelte, Angular, podemos continuar usando o jQuery, mas, na realidade, não é tão importante. Esta é a parte de nossa aplicação que vemos - seus "músculos" e "pele". Mas a maneira como você pensa - com que termos você opera, que mecânica você usa para visualizar em sua mente como os dados "fluem" em seu aplicativo - tudo isso vem do seu esqueleto. Do gerente estadual.


Lembre-se, há alguns anos, estávamos cansados ​​de JavaScript ? Agora vejo um grande número de pessoas se cansando de gerentes de Estado. Restaurado? Sim , sim e sim . RxJS? Também . MobX? Se é tão simples - caramba, por que tem uma página trap.html na documentação ?


A resposta "por que Ă© tĂŁo difĂ­cil para muitos" Ă©, mas primeiro vocĂŞ precisa formular o problema com precisĂŁo.


Escolhendo uma manjedoura de estado - escolhemos uma maneira de pensar. Existem muitas opções agora, mas as abordagens mais populares se enquadram em 3 grupos:


  • Flux / Redux-like : um repositĂłrio global com ações e redutores. Existem muitos deles, mas eu mesmo mencionaria Redux , Effector , Storeon , Unstated e Reatom . Estes nĂŁo sĂŁo "os melhores dos melhores", mas os "mais diversos". Todas as soluções da lista trazem algo Ăşnico e incomum, e vocĂŞ pode pegar várias idĂ©ias interessantes.


    Essa abordagem Ă© primariamente imperativa (completa na Thuring) e global .


  • Observáveis e tubos. As soluções mais populares de hoje neste grupo sĂŁo RxJS e MobX . Dos menos conhecidos - Kefir , Bacon , CycleJS . Svelte , a propĂłsito, tambĂ©m se enquadra nessa lista. Eles sĂŁo todos muito diferentes do ponto de vista da experiĂŞncia do desenvolvedor, mas do ponto de vista fundamental eles diferem de uma Ăşnica maneira: MobX, Svelte e outros podem ser descritos do ponto de vista da topologia pelo gráfico usual “o que aciona o quê”, mas o RxJS nĂŁo Ă©, seu gráfico de links multidimensionais e "loops estranhos" podem aparecer neletransmitir observáveis ​​em observáveis. Isso o torna mais poderoso, por um lado, e mais complexo, por outro. Uma histĂłria semelhante foi com o roteiro. Eles descobriram que seu sistema de tipos Ă© completo na TurĂ­ngia. A Ăşnica coisa que se seguiu foi que ele poderia congelar na etapa de verificação e eles adicionaram um limite de tempo ao trabalho.


    Isso pode parecer um pouco estranho, mas, em geral, essa classe de soluções tende a ser local ou ad-hoc e declarativa - mas sem diminuir a capacidade de usar lógica arbitrária.


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


Qualquer interação entre os dois mundos deve ser explícita, diretamente diferenciada no código, para não acontecer por acaso durante a revisão do código e, o mais importante - para ocorrer na terra do usuário e não nas bibliotecas.


Você não deve escolher soluções específicas, mas para o meu novo projeto eu usaria o GraphQL + Apollo para armazenar conhecimento e para gerenciamento de estado - Xstate + RxJS, felizmente, eles são amigos um do outro .


Pare de se preocupar em colocar tudo em uma solução. Você não precisa disso.


All Articles