Como Criar um Redux do Zero

Samer Kayali
3 min readDec 13, 2021
Photo by Austin Distel on Unsplash

O Redux é uma biblioteca bastante popular, segundo Mark Erikson em 2018, em seu artigo, Redux — Not Dead Yet!, cerca de 60% das aplicações React usavam Redux, sem contar aplicações em vanilla JavaScript ou em frameworks como Angular e VueJs.

O uso do redux proporciona bastante maleabilidade nas aplicações além de ser um ótimo candidato para implementação da Arquitetura Flux.

Nesse artigo vamos aprender como criar uma versão simplificada dessa biblioteca, também vamos fazer uma aplicação simples pra entendermos seu funcionamento.

Vamos começar criando a nossa Store que é onde mora todo o coração do Redux.

createStore

Photo by Tim Mossholder on Unsplash

A nossa função createStore nada mais é que uma factory function que retorna pra gente 3 métodos, getState, dispatch e subscribe. Abaixo vou explicar o que cada parte dessa função faz.

createStore

Vamos entender por partes?

state

É basicamente a parte central onde se encontra o nosso objeto contendo os dados da nossa store.

listeners

São nossas funções que são cadastradas pelo método subscribe para serem executadas assim que um dispatch é acionado.

getState()

É o método que usamos para acessar o nosso estado.

dispatch()

É o método responsável por atualizar nossa loja.

subscribe()

É o método responsável por cadastrar nossas funções para que sejam executadas quando o dispatch for acionado. Ele retorna um callback que remove a função cadastrada previamente quando desejamos que algum elemento não receba mais notificações quando o estado da nossa store for alterado.

Agora vamos segunda parte, combineReducers

combineReducers

Photo by Sergio Mena Ferreira on Unsplash

O CombineReducers é uma função que abstrai a lógica de conectar o rootReducer à sua loja. Ela tem uma cara bem feia porém é muito útil para se escrever menos boilerplate.

Ela na pŕatica transforma seu rootReducer disso

Pra apenas isso

Abaixo deixo um codeSandbox com todo o redux mostrado acima e um projeto bem simples mostrando sua aplicação.

--

--