Procurando uma forma de ajudar os(as) desenvolvedores(as) que estão fora do mercado do mercado de trabalho, eu decidi iniciar uma série de posts onde eu abordo perguntas e respostas recorrentes de uma entrevista para uma vaga de desenvolvedor React. Esse é o segundo post da série e desta vez eu focarei no Redux, um dos gerenciadores de estado mais usado pela comunidade. E assim como no primeiro post, eu caprichei para o conteúdo ser o mais rico possível, então aproveitem a leitura <3
Flux é um paradigma de design de aplicativo usado como substituto do padrão mais tradicional, o MVC. Não é um framework ou uma biblioteca, mas um novo tipo de arquitetura que complementa o React e o conceito de fluxo de dados unidirecional. O Facebook usa esse padrão internamente ao trabalhar com o React.
O fluxo de trabalho acontece entre os componentes dispatcher, stores e views com entradas e saídas distintas, como a seguir:
O Redux é uma biblioteca JavaScript de código aberto para gerenciar o estado do aplicativo. Ele pode ser utilizado junto com o React ou com qualquer outra biblioteca de visualizações. É pequeno (cerca de 2kB) e não possui dependências.
O Redux segue três princípios fundamentais:
Fonte única de verdade
: o estado de todo o aplicativo é armazenado em uma árvore de objetos com um único armazenamento. A árvore de estado único facilita o controle das alterações ao longo do tempo e a depuração ou inspeção do aplicativo.O estado é somente leitura
: a única maneira de alterar o estado é emitir uma ação, um objeto que descreve o que aconteceu. Isso garante que, nem as visualizações, nem as callbacks da rede sejam gravadas diretamente no estado.As alterações são feitas com funções puras
: para especificar como a árvore de estados é transformada por ações, escreva reducers. Os reducers são apenas funções puras que tomam o estado anterior e uma ação como parâmetros, e assim retornam o próximo estado.Você só precisa exportar o store do módulo onde ele foi criado com o createStore()
.
store = createStore(myReducer)
export default store
Essas bibliotecas são muito diferentes e servem para propósitos diferentes, mas existem algumas semelhanças.
O Redux é uma ferramenta para gerenciar o estado em todo o aplicativo e geralmente é usado como uma arquitetura para UIs. Pense nisso como uma alternativa ao Angular. O RxJS é uma biblioteca de programação reativa e geralmente é usado como uma ferramenta para realizar tarefas assíncronas em JavaScript.
Pense nisso como uma alternativa às Promises. O Redux usa o paradigma reativo porque o store é reativo. O store observa ações à distância e muda a si próprio. O RxJS também usa o paradigma reativo, mas, em vez de ser uma arquitetura, fornece blocos de construção básicos, os observables, para realizar esse padrão.
Você pode usar o Contexto diretamente na sua aplicação, e ele será ótimo para passar dados a componentes 'profundamente' aninhados.
Vale apontar que o Redux usa o contexto internamente, mas não expõe esse fato na API pública. Ainda assim, o Redux é muito mais poderoso e fornece um grande número de recursos que a API de contexto não fornece.
redux-saga
é uma biblioteca que visa facilitar o uso e aliviar os efeitos colaterais do Redux, como busca de dados e acesso ao cache do navegador.
O Saga é como uma threada separada na sua aplicação, sendo a único responsável pelos efeitos colaterais. redux-saga
é um middleware redux, o que significa que esse encadeamento pode ser iniciado, pausado e cancelado a partir da aplicação principal, com ações normais do Redux.
O redux-thunk
é um middleware que permite a você escrever actions creators que retornam uma função ao invés de uma ação. Ele pode pode ser usado para realizarmos o dispatch somente se uma condição é cumprida. A função interna recebe os métodos dispatch() e getState() como parâmetros.
Ambos lidam com efeitos colaterais. Na maioria dos casos, o Thunk usa as Promises para tratá-los, enquando o Saga usa os Generators. Como as promises são familiares a muitos desenvolvedores, o redux-thunk
é mais simples de ser utilizado, entretando, o redux-saga, com os seus generators, é mais poderoso. Mas ambos os middlewares podem coexistir, portanto, você pode começar com o thunk
e introduzir o saga
quando precisar dele.
O Redux Form trabalha com o React e o Redux para permitir que um formulário no React use o Redux para armazenar todo o seu estado. Ele pode ser usado com entradas HTML5 tradicionais, mas também funciona muito bem com frameworks comuns de UI, como Material UI, React Widgets e React Bootstrap.
Algumas das principais características do Redux Form são:
Por hora é só pessoal! Apesar de eu ter trazido apenas as questões que achei mais recorrentes para um post sobre o Redux, você pode encontar muitas outras nesse repositório aqui. Fique de olho também nos próximos posts relativos a entrevistas de emprego, e se surgirem dúvidas ou sugestões, não deixem de mandar aí nos comentários!