5 razões pelas quais você deve esquecer o Redux nos aplicativos React

Trabalho com o React há quase 3 anos, usei o Redux e o MobX e tenho uma pergunta até agora. Por que a grande maioria dos desenvolvedores de front-end continua acreditando firmemente que o Redux + Redux Saga + Reselect + 100500 outras bibliotecas que facilitam a vida é a melhor solução até o momento? Vou dar 4 argumentos a favor do uso do MobX em vez do Redux no próximo projeto.

MobX permite escrever códigos cada vez mais limpos


Vamos salvar 2 partes de código que fazem a mesma coisa. Aqui está a aparência de um redutor no Redux:

imagem

Para alterar o estado, você precisa chamar uma função chamada action na terminologia Editores:

imagem

E na maioria dos casos (nem sempre, mas essas são as "melhores práticas" usadas em muitos projetos), você precisará escrever este boilerplate:

imagem

Em seguida, será necessário inicializar a loja (isso precisará ser feito uma vez, mas ainda assim):

imagem

E jogue nosso armazenamento inicial ainda mais no aplicativo por meio do provedor (também uma operação única):

imagem

Agora você pode executar algumas operações com dados em seus componentes:

imagem

Acontece que, no caso do Redux, para alterar os dados em seu armazenamento, você deve chamar algumas funções que criarão um novo objeto de estado ... Pessoalmente, para mim, isso parece um absurdo completo. Vamos dar uma olhada na mesma funcionalidade realizada pela MobX. Nosso lado:

imagem

E então você pode usá-lo no componente:

imagem

Sim, isso mesmo, em vez de algumas funções que modificam objetos, você pode usar a abordagem clássica de POO, com classes, suas propriedades e métodos. Não tenha medo dos decoradores (@), eles apenas adicionam a funcionalidade necessária para rastrear alterações de dados. A propósito, uma abordagem semelhante, com classes, para armazenamento de dados é usada no Angularjs (tela retirada daqui angular.io/start/data ):

imagem

MobX permite escrever menos código


Para ver isso, basta olhar para os exemplos acima. E agora, em vez de escrever um clichê interminável, você pode finalmente se concentrar em escrever a lógica de negócios do aplicativo, o que é uma boa notícia.

Terceiro, otimização de desempenho


Se você observar os exemplos acima, poderá ver que, no caso do MobX, não usei um componente puro e isso não é um erro. Você simplesmente não precisa usar nenhuma otimização nesse caso, porque seu componente só será renderizado novamente quando os dados que você usa nele forem alterados. E sim, você pode esquecer os Pure Components, shouldComponentUpdate e o que mais você usa nesses casos. Idealmente, todos os seus componentes que não são HOC e usam alguns dados do armazenamento devem ser observáveis ​​e você esquecerá os problemas de otimização para sempre.

Quarto - Menos Dependências


Qualquer pessoa que use o Redux deve saber em primeira mão que muitas bibliotecas “maravilhosas” vêm com ele. E é bom que seja apenas um thunk, ou talvez seja assim, os desenvolvedores seguirão o caminho da luz da escuridão e querem usar Redux Saga, Reslect e um monte de bibliotecas estranhas que tornam seu código não apenas mais lento, mas também mais difícil de entender. E terminar algumas funcionalidades menores ou encontrar um bug neste trabalho será incrivelmente difícil e longo. O MobX é a solução definitiva = não requer bibliotecas adicionais, privará você de todos esses encantos; portanto, com ela, a lógica comercial do seu aplicativo ficará limpa, como uma lágrima de bebê.

UPD Thanks MaZaAa

A quinta razão - a capacidade de abandonar o setState


O setState tem várias desvantagens (uma breve tradução do artigo que pode ser lida no original aqui ):

1. É assíncrono.


Isso pode levar a um comportamento inesperado:

imagem

Na tela acima, o alerta deveria ter sido 2, mas, como setState é assíncrono, vem mais tarde.

2. setState leva a renderizadores de componentes desnecessários:


a. É renderizado mesmo se o novo valor == o valor antigo
b. Há situações em que a mudança de estado não leva a nenhuma mudança, por exemplo, quando temos condições para exibir o estado em que. Na captura de tela abaixo, ocorreu um clique no renderizador, embora os dados não devam ser renderizados devido à condição faseada:

imagem

c. Às vezes, os dados que o setState atualiza não desempenham nenhum papel na renderização do DOM (por exemplo, temporizadores). E de qualquer maneira, o componente está sendo renderizado.

3. setState não é adequado para todos os casos.


Existem componentes que usam ganchos / métodos de ciclos de vida dos componentes e, nesse caso, não apenas um renderizador extra ocorrerá, mas esses eventos (ganchos) serão chamados todas as vezes ao mesmo tempo, o que pode levar a um comportamento estranho.

O uso do MobX o protegerá dessas falhas, porque você pode abandonar completamente o setState:

imagem

Se você não concorda com algo ou eu não entendo algo, por favor, dê os contra-argumentos nos comentários. Link para a sandbox da qual são capturadas as capturas de tela do MobX: codesandbox.io/s/mobxreact-s7db5 , com Redux: codesandbox.io/s/oj7px08qy9

Source: https://habr.com/ru/post/pt459706/


All Articles