Redux Thunk 是 Redux 的一个中间件,它允许你在 action creators 中编写异步逻辑。这意味着你可以在 action creator 中执行异步操作(例如 API 调用),然后在操作完成后分发同步或异步的 action。
Redux Thunk 的核心思想是,action creator 可以返回一个函数而不是一个普通的 action 对象。当 Redux Thunk 中间件看到这个函数时,它会调用这个函数,并将 dispatch
和 getState
作为参数传递给它。这使得你可以在函数内部执行异步操作,并在适当的时候使用 dispatch
分发 action。
Redux Thunk 主要涉及两种类型的 action:
type
和其他 payload 数据。dispatch
和 getState
作为参数。Redux Thunk 适用于需要在 Redux 中处理异步操作的场景,例如:
如果你遇到 Redux Thunk 未调度的问题,可能是由以下原因导致的:
redux-thunk
包,并在创建 Redux store 时应用了它。import { createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import rootReducer from './reducers';
const store = createStore(rootReducer, applyMiddleware(thunk));
// 错误的 action creator
const fetchData = () => {
// 这里应该是异步操作,但返回的是一个对象而不是函数
return { type: 'FETCH_DATA' };
};
// 正确的 action creator
const fetchData = () => async (dispatch, getState) => {
dispatch({ type: 'FETCH_DATA_REQUEST' });
try {
const response = await fetch('/api/data');
const data = await response.json();
dispatch({ type: 'FETCH_DATA_SUCCESS', payload: data });
} catch (error) {
dispatch({ type: 'FETCH_DATA_FAILURE', error });
}
};
import { useDispatch } from 'react-redux';
import { fetchData } from './actions';
const MyComponent = () => {
const dispatch = useDispatch();
useEffect(() => {
dispatch(fetchData());
}, [dispatch]);
// ...
};
领取专属 10元无门槛券
手把手带您无忧上云