![](/img/trans.png)
[英]Error get 'Uncaught Error: Actions must be plain objects. Use custom middleware for async actions.' by redux-thunk
[英]Redux-Thunk Error: Actions must be plain objects. Use custom middleware for async actions
我有一个以 firebase 作为后端的歌本应用程序,并且遇到了错误:操作必须是普通对象。 使用自定义中间件进行异步操作。
动作创建者
export const createAction = (type, payload) => ({ type, payload });
歌曲.action.js
import { getSongsAndDocuments } from '../../utils/firebase/firebase.utils';
export const fetchSongsStart = () => {
createAction(SONGS_ACTION_TYPES.FETCH_SONGS_START);
};
export const fetchSongsSuccess = songs => {
createAction(SONGS_ACTION_TYPES.FETCH_SONGS_SUCCESS, songs)
};
export const fetchSongsFailed = error => {
createAction(SONGS_ACTION_TYPES.FETCH_SONGS_FAILED, error);
};
export const fetchSongsAsync = () => {
return async dispatch => {
dispatch(fetchSongsStart());
try {
const songs = await getSongsAndDocuments();
dispatch(fetchSongsSuccess(songs));
} catch (error) {
dispatch(fetchSongsFailed(error));
}
};
};
歌本.jsx
const dispatch = useDispatch();
useEffect(() => {
dispatch(fetchSongsAsync());
}, []);
store.js
import { compose, createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import { rootReducer } from './root-reducer';
const middleWares = [thunk];
const composeEnhancer =
(process.env.NODE_ENV !== 'production' && window && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__) ||
compose;
const composedEnhancers = composeEnhancer(applyMiddleware(...middleWares));
export const store = createStore(rootReducer, undefined, composedEnhancers);
您必须在动作创建者函数中返回调用createAction
函数的结果,即:
return createAction(SONGS_ACTION_TYPES.FETCH_SONGS_START);
代替:
createAction(SONGS_ACTION_TYPES.FETCH_SONGS_START);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.