DEV Community

Gabriel_Silvestre
Gabriel_Silvestre

Posted on • Updated on

Introdução ao Redux

Redux

O que é?

É uma biblioteca JS que tem como objetivo resolver problemas de fluxo de informação de uma aplicação front-end. O Redux pode ser usado junto de qualquer framework front-end e até mesmo com JS puro "Vanilla JS".
De forma mais generalista, podemos pensar no Redux como um “Banco de Dados do Front-end”, já que ele irá armazenar todos os estados de nossa aplicação, os disponibilizando em todo e qualquer componente.

Instalando

O Redux não vem por padrão na criação de um projeto React através do npx, logo temos que instalá-lo manualmente, para isso podemos utilizar o seguinte comando.

npm i redux
Enter fullscreen mode Exit fullscreen mode

Peças do Redux

Quais são?

O Redux é formado por quatro partes principais, sendo elas:


Store

O que fazem?

É uma entidade de armazenamento central, responsável por armazenar todos os estados de nossa aplicação. “Banco de dados do front”.

Sintaxe

Para inicializarmos nossa Store utilizamos o método .createStore(), esse que deverá receber por parâmetro o(s) Reducer(s) que iremos utilizar em nossa aplicação. Lembrando que é necessário importar de forma explícita o Redux dentro de nosso arquivo.

const store = Redux.createStore(reducer);
Enter fullscreen mode Exit fullscreen mode

Reducer

O que fazem?

É uma função cuja única responsabilidade é receber e tratar pedidos de atualização provenientes das Actions, enviando o estado atualizado para o Store.

Sintaxe

As funções Reducer podem ser criadas a partir de Arrow Functions ou funções tradicionais, sendo que ambas recebem dois parâmetros obrigatórios, o estado inicial e a Action.

Reducers normalmente possuem uma estrutura simples de switch/case, onde irá ocorrer apenas a identificação da ação e o retorno do novo estado, qualquer “trabalho” muito elaborado para modificar o estado deve ser feito antes mesmo de enviar a Action ao Reducer.

O estado inicial deve possuir um valor padrão, visto que em sua inicialização o Reducer não recebe o valor do estado de outro lugar, seria o equivalente a definir um valor inicial ao estado de um componente de classe ou funcional.

Por questões de legibilidade o estado inicial é definido fora do parâmetro, afinal ele pode ser um objeto complexo e caso fosse inicializado dentro dos parâmetros, tornaria a função ilegível.

function reducer(state = INITIAL_STATE, action) {
  switch () {
    case:
      return newState;
    default:
      return state;
  }
}
Enter fullscreen mode Exit fullscreen mode
const reducer = (state = INITIAL_STATE, action) => {
  switch () {
    case:
      return newState;
    default:
      return state;
  }
}
Enter fullscreen mode Exit fullscreen mode

Action

O que fazem?

É um objeto que contém as alterações que queremos fazer em algum estado, possuindo duas chaves, type para identificar a ação e payload que irá conter os valores a serem atualizados. Comumente chamada de intenção.

Sintaxe

As Actions são objetos, logo podemos criá-las de duas formas, a estática e a dinâmica, por motivos óbvios a forma dinâmica é a mais utilizada. Sendo que a forma dinâmica é conhecida como actionCreator, que refere-se a uma função que retorna um objeto no formato esperado de uma Action.

const action = { type: /* tipo da ação */, payload: /* novo valor */ };
Enter fullscreen mode Exit fullscreen mode
const actionCreator = (value) => ({ type: /* tipo de ação */, payload: value });
Enter fullscreen mode Exit fullscreen mode

Dispatch

O que fazem?

É uma função que envia o objeto Action para o Reducer, pois as Actions não possuem acesso aos Reducers.

Sintaxe

O Dispatch é um método simples do Store, que tem como responsabilidade enviar a Action ao Reducer. Sua sintaxe é extremamente simples, chamamos o método .dispatch() e passamos por parâmetro a Action a ser enviada.
Apesar da simplicidade, temos que ter o cuidado de sempre importar o Store, pois sem ele não temos acesso ao Dispatch.

store.dispatch(/* Action */);
Enter fullscreen mode Exit fullscreen mode

Combinando Reducers

Como fazer?

Como vimos até agora, só conseguimos passar um Reducer para a nossa Store, porém não é nem um pouco viável criar uma Store para cada Reducer, sendo assim o Redux disponibiliza uma função chamada combineReducers(), que tem como objetivo agrupar todos os Reducers, possibilitando assim a nossa Store receber quantos Reducers forem necessários.

Sintaxe

A sintaxe dessa função é extremamente simples, passamos por parâmetro um objeto que irá armazenar todos os nossos Reducers, sendo que cada chave condiz com um Reducer.
Lembrando que é necessário importar essa função do Redux.

const rootReducer = combineReducers({
  someReducer,
  otherReducer,
});

const store = createStore(rootReducer);
Enter fullscreen mode Exit fullscreen mode

Top comments (0)