Асинхронная логика с createAsyncThunk
Обрабатывайте вызовы API в Redux с помощью createAsyncThunk и жизненного цикла pending/fulfilled/rejected.
«Асинхронная логика с createAsyncThunk» — бесплатный урок React Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.
Добро пожаловать
Что такое createAsyncThunk
Определение асинхронного действия
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
}
);Обработка в extraReducers
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;
});
}Отправка асинхронного действия
const dispatch = useDispatch();
useEffect(() => {
dispatch(fetchUser(userId));
}, [userId]);Доступ к состоянию в асинхронном действии
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());
}
);Обработка ошибок с помощью rejectWithValue
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Отмена асинхронных действий
async (id, { signal }) => {
const res = await fetch('/api/' + id, { signal });
return res.json();
}Ожидание отправленного асинхронного действия
const result = await dispatch(saveItem(data));
if (saveItem.fulfilled.match(result)) {
navigate('/success');
}Синтаксис builder и синтаксис объекта
Быстрая проверка
Итоги
Далее
Часто задаваемые вопросы
Урок «Асинхронная логика с createAsyncThunk» бесплатный?
Да — полный текст урока «Асинхронная логика с createAsyncThunk» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.
Чему я научусь в уроке «Асинхронная логика с createAsyncThunk»?
Обрабатывайте вызовы API в Redux с помощью createAsyncThunk и жизненного цикла pending/fulfilled/rejected. Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать React Academy?
Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Асинхронная логика с createAsyncThunk»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке React Academy?
Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Части Redux Toolkit и createSlice
- Асинхронная логика с createAsyncThunk
- RTK Query: конечные точки и автоматическое кэширование
- Оптимистичные обновления и аннулирование кэша