Estado previsível para grandes equipes e depuração de viagem no tempo. Redux Toolkit (RTK) compensa quando conformidade, ecossistemas de middleware ou investimento Redux existente exigem reducers centralizados. Para novos aplicativos Expo SDK 57, use TanStack Query + Zustand por padrão, a menos que um ADR (Architecture Decision Record) exija RTK.
Buscar em componentes para o Redux a cada montagem - Duplica o Query. Correção: Use Query para o servidor; Redux apenas para fluxo de trabalho do cliente.
Reducer raiz gigante - Um arquivo de slice por funcionalidade. Correção:combineReducers através do mapa de reducers do configureStore.
Valores não serializáveis no estado - Date, instâncias de classe quebram o DevTools. Correção: Armazene strings ISO; mapeie em seletores.
useSelector sem função de igualdade - Retornar novos objetos re-renderiza com frequência. Correção: Selecione primitivos ou use shallowEqual.
redux-persist com tokens no AsyncStorage - Falha na revisão de segurança. Correção: Armazenamento seguro para segredos; veja o guia de persistência.
Instalar RTK "por via das dúvidas" - Custo de bundle e boilerplate. Correção: ADR antes da adoção.
Duas caches de servidor - RTK Query + TanStack Query para os mesmos endpoints. Correção: Escolha um.
RTK + react-redux é maior que Zustand. Justificado quando DevTools e middleware são necessários - não para um contador de badges.
Novos aplicativos Expo devem começar com Redux?
Não - padrão Query + Zustand por ADR Decision 10. Adote RTK quando os requisitos surgirem.
RTK Query vs TanStack Query?
A paridade de recursos é próxima. TanStack Query tem documentação mais forte para Expo/mobile neste site. RTK Query quando os reducers já gerenciam o aplicativo.
Como tipar useSelector?
Exporte RootState do store; use TypedUseSelectorHook<RootState> - veja os hooks tipados na receita.
Async thunks ainda?
createAsyncThunk funciona. Muitas equipes usam mutações do Query em vez de thunks para rede - thunks para orquestração complexa de múltiplos slices.
Redux DevTools em um dispositivo físico?
Use o plugin Flipper Redux ou depuração remota de JS. Builds de produção desativam DevTools via devTools: __DEV__.
Como testar telas conectadas?
import { Provider } from "react-redux";import { configureStore } from "@reduxjs/toolkit";const store = configureStore({ reducer: { cart: cartSlice.reducer } });render(<Provider store={store}><CheckoutScreen /></Provider>);
Os slices podem ficar em pastas de features?
Sim - features/cart/cartSlice.ts importado em app/store.ts. Mantém as features modulares.
Immer já está dentro do createSlice?
Sim - modifique state nos reducers; Immer produz atualizações imutáveis.
Sequência de logout?
Despache resetCheckout, clearCart e api.util.resetApiState() se estiver usando RTK Query; mais queryClient.clear() se TanStack Query coexistir durante a migração.
Migrando de Redux para Zustand?
Slice por slice - mova primeiro as leituras pesadas de UI para Query, depois os slices do cliente para Zustand. Execute o checklist de refatoração.
Expo Router com Redux?
Um único Provider em app/_layout.tsx. Rotas despacham ações; evite importações de store em tipos de entidade compartilhados.