0Pricing
React Academy · Aula

Lógica assíncrona com createAsyncThunk

Trate chamadas de API no Redux com createAsyncThunk e o ciclo de vida pending/fulfilled/rejected.

Lógica assíncrona com createAsyncThunk é uma aula grátis de React Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de React Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de React Academy inclui 4 aulas no total.

Boas-vindas

Nesta lição, você lidará com chamadas à API no Redux usando createAsyncThunk e tratará as ações do ciclo de vida pending, fulfilled e rejected na sua fatia.

O que é createAsyncThunk?

createAsyncThunk gera um criador de ações assíncronas que envia automaticamente três ações do ciclo de vida: pending (iniciada), fulfilled (resolvida) e rejected (falhou). Você trata cada uma delas em extraReducers.

Definindo uma ação assíncrona

Chame createAsyncThunk com uma string de tipo e uma função assíncrona que cria a carga útil. Retorne os dados que você deseja como carga útil de fulfilled.
import { createAsyncThunk } from '@reduxjs/toolkit';

export const fetchUser = createAsyncThunk(
  'users/fetchById',
  async (userId) => {
    const response = await fetch('/api/users/' + userId);
    return response.json(); // becomes action.payload on fulfilled
  }
);

Tratando em extraReducers

Adicione casos para os três estados do ciclo de vida em extraReducers da fatia. Gerencie adequadamente o carregamento, os dados e o estado de erro.
extraReducers: (builder) => {
  builder
    .addCase(fetchUser.pending, state => {
      state.loading = true;
      state.error = null;
    })
    .addCase(fetchUser.fulfilled, (state, action) => {
      state.loading = false;
      state.user = action.payload;
    })
    .addCase(fetchUser.rejected, (state, action) => {
      state.loading = false;
      state.error = action.error.message;
    });
}

Enviando a ação assíncrona

Envie a ação assíncrona de um componente com useDispatch. Passe os argumentos diretamente ao criador da ação assíncrona.
const dispatch = useDispatch();
useEffect(() => {
  dispatch(fetchUser(userId));
}, [userId]);

Acessando o estado na ação assíncrona

A função que cria a carga útil recebe um objeto thunkAPI como segundo argumento. Use thunkAPI.getState() para ler o estado atual do Redux e thunkAPI.dispatch() para enviar outras ações.
export const saveItem = createAsyncThunk(
  'items/save',
  async (item, { getState }) => {
    const { auth } = getState();
    return fetch('/api/items', {
      method: 'POST',
      headers: { Authorization: 'Bearer ' + auth.token },
      body: JSON.stringify(item),
    }).then(r => r.json());
  }
);

Tratando erros com rejectWithValue

Para passar uma carga útil de erro personalizada ao caso rejected, use thunkAPI.rejectWithValue(). A propriedade action.payload da ação rejected conterá seu objeto de erro personalizado.
export const fetchData = createAsyncThunk(
  'data/fetch',
  async (id, { rejectWithValue }) => {
    const res = await fetch('/api/' + id);
    if (!res.ok) return rejectWithValue({ status: res.status });
    return res.json();
  }
);
// In rejected case: action.payload.status is available

Cancelando ações assíncronas

Passe um sinal de AbortController à sua chamada fetch dentro da ação assíncrona. createAsyncThunk fornece o sinal por meio de thunkAPI.signal automaticamente quando a ação assíncrona é cancelada com dispatch.abort().
async (id, { signal }) => {
  const res = await fetch('/api/' + id, { signal });
  return res.json();
}

Aguardando uma ação assíncrona enviada

O dispatch() de uma ação assíncrona retorna uma Promise. Você pode aguardá-la para saber quando o trabalho assíncrono terminar, o que é útil em padrões de redirecionamento após o salvamento.
const result = await dispatch(saveItem(data));
if (saveItem.fulfilled.match(result)) {
  navigate('/success');
}

Notação com builder versus notação com objeto

Use o padrão de retorno de chamada builder.addCase em extraReducers — ele é seguro quanto aos tipos e tem suporte oficial. A notação mais antiga com chaves de objeto foi descontinuada nas versões recentes do RTK.

Verificação rápida

O que acontece quando a função assíncrona dentro de createAsyncThunk lança um erro?

Recapitulação

createAsyncThunk gera automaticamente as ações pending, fulfilled e rejected. Trate as três em extraReducers. Use rejectWithValue para cargas úteis de erro personalizadas e thunkAPI.getState() para acessar o estado atual dentro das ações assíncronas.

A seguir

Próxima lição: **RTK Query: endpoints e armazenamento automático em cache** — você definirá endpoints de API com createApi e deixará o RTK Query gerenciar o armazenamento em cache automaticamente.

Perguntas Frequentes

A aula “Lógica assíncrona com createAsyncThunk” é grátis?

Sim — o texto completo de “Lógica assíncrona com createAsyncThunk” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de React Academy, atualize para CoddyKit PRO. O curso de React Academy inclui 4 aulas no total.

O que vou aprender em “Lógica assíncrona com createAsyncThunk”?

Trate chamadas de API no Redux com createAsyncThunk e o ciclo de vida pending/fulfilled/rejected. Você pratica React Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar React Academy?

Nenhuma experiência prévia é necessária. React Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Lógica assíncrona com createAsyncThunk”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de React Academy?

Sim. Cada aula de React Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Partes do Redux Toolkit e createSlice
  2. Lógica assíncrona com createAsyncThunk
  3. RTK Query: endpoints e armazenamento automático em cache
  4. Atualizações otimistas e invalidação do cache
← Voltar para React Academy