Hora de substituir o Redux
Tags: braziliandevs, javascript, webdev
Published: 2024-04-27 13:09:35

Olá pessoas! Vamos deixar claro desde o início que Redux não é ruim. Ruim é a forma como usam ele. Eu uso o ele desde 2016, e muitas vezes vejo as pessoas cometendo os mesmos erros. O principal? Querem usar Redux para tudo.

Muitas vezes as pessoas começam usando Redux para resolver problemas que fazem sentido, mas logo começam a cair na armadilha de adicionar o resto da aplicação para fazer sentido o investimento em usar o Redux. "Fica mais fácil e tudo centralizado" eles dizem, mas na maioria das vezes não fica.

Mas, o que é esse tudo o que eu to falando?

![Texto escrito Tudão.png](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8ea4hirly8ixbn3vi95w.png)

## O que é tudo?
Estados locais como coisas visuais e formulários, estados de uma única página como query strings de URL, estados simples e não compartilhados, e requisições simples que não precisam ser cacheadas.

Você consegue resolver todos os problemas de cima com soluções simples, porque todos esses problemas são simples. Redux é complexo porque é feito para resolver problemas complexos. Mas como falei, muitas pessoas insistem em usar isso como uma bala de prata que funciona para tudo.

Não só você está tornando seu código mais complexo, como também está introduzindo mais responsabilidades pra você. Em vez de ter um estado que some quando o componente ou Context são destruídos, agora você tem um estado global cacheado que só será limpo se você tomar uma ação. Gerenciar cache é complicado, e o Redux puro não é a ferramenta aconselhada pra isso.

Os melhores casos pro Redux são estados complexos e com muitas interações. Isso não sou nem só eu que digo. Desde 2016 essa é uma opinião popular compartilhada por várias pessoas, incluindo um dos [criadores do Redux](https://medium.com/@dan_abramov/you-might-not-need-redux-be46360cf367) e também está no próprio [site do Redux](https://redux.js.org/faq/general#when-should-i-use-redux).

Dito tudo isso... Até nesses casos eu ainda aconselharia outras opções além do Redux.

## Mas qual é o problema do Redux?
Na real, são problemas. Não existe nenhuma opção na vida que seja perfeita. Tudo tem pontos positivos e negativos, e o Redux não é excessão. Além disso, na minha opinião, já surgiram muitas outras bibliotecas que resolvem os problemas que o Redux tenta resolver e de forma melhor.

Os principais problemas pra mim são a quantidade de código, e a gerenciamento de cache.

### Quantidade de código
Recentemente eu troquei várias páginas de um projeto que estava usando Redux por `@tanstack/react-query` e a redução foi de mais ou menos 50% do código. Mesmo contando com `yarn.lock`, configuração pra testes e do projeto, ainda assim eram 200 linhas adicionadas pra 360 removidas.

Por que isso? Porque Redux não era a solução ideal pra isso, mais especificamente, Redux Toolkit. Bem provavel que o RTK Query (Redux Toolkit Query) também reduzisse bastante as linhas de código, mas no final as soluções apresentadas pelo `@tanstack/react-query` eram melhores pro nosso projeto.

Outro exemplo são estados compartilhados e globais. Se eles ainda são simples ou não mudam muito, como permissões, tema, ou lingua, você pode muito bem manter eles em um `Context`. O código pra manter isso é muito menor, e mais fácil de entender.

### Gerenciamento de cache
Redux e RTK (Redux Toolkit) em si não foram feitos para gerenciar cache. RTK Query foi. Não só ele, como várias outras ferramentas. Mas o que eu quero dizer com isso? Que quando você tenta usar apenas Redux ou RTK, você terá que desenvolver todas essas técnicas. Você vai ter que pensar nos items a seguir e muito mais:
- Quando que devemos eliminar/invalidar o cache?
- Quando que o cache vai estar "vencido"?
- Vamos usar parte dos dados primeiro e fazer um request por trás?

São várias pequenas decisões, onde cada uma traz seus problemas, e que a responsabilidade de planejar todas elas passou a ser nossa. Não precisa ser assim. Como falei antes, tem ferramentas que já fazem isso pra gente. RTK Query, TanStack Query, Apollo Client, etc. Todos eles tem várias ferramentas para poder lidar com o cache. Nós ainda temos a responsabilidade de saber como e onde usar, mas não precisamos desenvolver toda a lógica por trás disso e seus bugs.

---

## Conclusão
Pare de usar Redux para tudo. Problema simples, solução simples. Como o pessoal fala use o KISS (Keep it simple stupid) ou a versão brasileira, o MSO:

![Rogerinho do Ingá falando "Mantenha simples otário"](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/prixaivrbic6yhe9h26g.png)

Espero ter ajudado, e até a próxima \o/