>_ DevTrendspt

Idioma

Início

Linguagens

Seções

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarcados Segurança
TypeScript

Como o Redux Mudou e Por Que Ainda É Adicionado a Novos Projetos

Você se lembra da época em que um simples contador em Redux exigia criar três arquivos separados, declarar uma dúzia de constantes e escrever um enorme switch-case no reducer? Por causa disso, milhares de desenvolvedores passaram a odiar a biblioteca. Mas o Redux não é mais o que era em 2015.

Os desenvolvedores reconheceram o problema a tempo e lançaram o Redux Toolkit (RTK). Hoje ele se tornou o padrão para trabalhar com a biblioteca e removeu quase tudo pelo que o Redux era anteriormente criticado.

Por que você precisa de um gerenciador de estado global

Em pequenas aplicações React, você pode facilmente lidar com a passagem tradicional de props ou com o Context integrado do React. Os problemas começam quando o projeto cresce. Quando dados de um formulário precisam atualizar simultaneamente uma barra lateral, o cabeçalho do site e enviar dados de analytics, a cadeia de props se transforma em caos.

Redux mantém o estado da aplicação em um único objeto (store). Você não modifica esse objeto diretamente. Em vez disso, você despacha uma action, e funções puras, os reducers, calculam o novo estado com base no anterior.

Essa abordagem oferece previsibilidade clara. Se algo quebrar na aplicação, através do Redux DevTools você pode ver o histórico completo de mudanças de estado e voltar no tempo, rastreando as ações do usuário passo a passo.

Como o Redux Toolkit facilitou o trabalho

Antes, para atualizar um único campo você precisava rastrear manualmente a imutabilidade do objeto, criando spreads complicados.

Redux Toolkit tem o Immer integrado. Agora o código dentro dos reducers é escrito como se você estivesse mutando o estado diretamente, e a biblioteca converte automaticamente isso em uma atualização imutável segura.

Vamos ver um exemplo básico de contador:

import { createSlice, configureStore } from '@reduxjs/toolkit'

const counterSlice = createSlice({
  name: 'counter',
  initialState: {
    value: 0
  },
  reducers: {
    incremented: state => {
      // Immer улавливает "мутацию" и создает новое состояние
      state.value += 1
    },
    decremented: state => {
      state.value -= 1
    }
  }
})

export const { incremented, decremented } = counterSlice.actions

const store = configureStore({
  reducer: counterSlice.reducer
})

store.subscribe(() => console.log(store.getState()))

store.dispatch(incremented()) // { value: 1 }
store.dispatch(incremented()) // { value: 2 }
store.dispatch(decremented()) // { value: 1 }

Sem arquivos separados com tipos de actions. A função createSlice criou tanto o reducer quanto os action generators para você.

Quando o Redux é necessário e quando é melhor ficar sem ele

O criador da biblioteca, Dan Abramov, escreveu "You Might Not Need Redux" há anos. Esse conselho ainda é relevante hoje.

Redux é útil em situações específicas:

  • Há muitos dados que mudam ativamente ao longo do tempo e são usados em diferentes partes da aplicação.
  • A lógica de atualização do estado é complexa ou requer sequenciamento estrito.
  • É necessário um debug conveniente com um histórico transparente de todos os eventos.
  • Muitas pessoas trabalham na equipe e é necessário um padrão único e claro para manipulação de dados.

Se você tem uma aplicação simples onde os dados precisam apenas ser passados um par de níveis para baixo, puxar o Redux aqui não vale a pena. Abstrações extras só vão complicar o código.

Início Rápido

A forma mais fácil de criar um projeto é com Vite e um template pronto de Redux Toolkit e TypeScript:

npx degit reduxjs/redux-templates/packages/vite-template-redux my-app

Para Next.js, há um template pronto da Vercel:

npx create-next-app --example with-redux my-app

Se você está adicionando a biblioteca a um projeto existente, basta instalar dois pacotes:

npm install @reduxjs/toolkit react-redux

Conclusão

O core do Redux pesa cerca de 2 KB. A biblioteca já deixou há muito tempo a era do código boilerplate interminável. Emparelhado com o Redux Toolkit, você obtém uma ferramenta rígida e previsível para gerenciamento de estado que funciona muito bem em projetos grandes.

Projetos relacionados