Redux Thunk - это middleware (промежуточное ПО) для Redux, который позволяет писать action creators (создатели действий), возвращающие функции вместо action objects (объектов действий).
По умолчанию Redux работает только с синхронными действиями. Однако в реальных приложениях часто нужно:
Без Thunk эти операции было бы сложно реализовать.
Thunk проверяет каждое dispatched (отправленное) действие:
dispatch
и getState
// Без Thunk - обычный action creator
function increment() {
return { type: 'INCREMENT' };
}
// С Thunk - может возвращать функцию
function incrementAsync() {
return (dispatch) => {
setTimeout(() => {
dispatch(increment());
}, 1000);
};
}
function fetchUser(id) {
return async (dispatch) => {
dispatch({ type: 'USER_FETCH_START' });
try {
const response = await api.getUser(id);
dispatch({ type: 'USER_FETCH_SUCCESS', payload: response });
} catch (error) {
dispatch({ type: 'USER_FETCH_ERROR', error });
}
};
}
function fetchIfNeeded(id) {
return (dispatch, getState) => {
if (shouldFetchUser(getState(), id)) {
return dispatch(fetchUser(id));
}
};
}
npm install redux-thunk
import { createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import rootReducer from './reducers';
const store = createStore(rootReducer, applyMiddleware(thunk));
Для сложных сценариев можно рассмотреть:
Thunk значительно расширяет возможности Redux, сохраняя при этом его концептуальную простоту.