我对 React 和 Redux 很陌生。我想使用redux-promise-middleware链接多个 API 调用,并按如下方式实现我的操作:
locationActions.js:
import { visitLocation } from '../services/actionService';
export const VISIT_LOCATION = 'VISIT_LOCATION';
export const VISIT_LOCATION_PENDING = 'VISIT_LOCATION_PENDING';
export const VISIT_LOCATION_FULFILLED = 'VISIT_LOCATION_FULFILLED';
export const VISIT_LOCATION_REJECTED = 'VISIT_LOCATION_REJECTED';
const visitLocationAction = (characterId, location) => ({
type: VISIT_LOCATION,
// visitLocation returns a new promise
payload: visitLocation(characterId, location)
});
export { visitLocationAction as visitLocation };
我使用以下方式从我的 React 组件调度此操作mapDispatchToProps
:
const mapDispatchToProps = dispatch => (
bindActionCreators({ visitLocation }, dispatch)
);
这行得通!但是,我想在visitLocation
解决并完成后调度另一个动作。我不能调用Promise.then()
,因为它不提供dispatch
方法,因此不能将我的操作“绑定”到减速器。
教程提到我应该打电话dispatch(secondAction())
,但我的动作创建者中没有可用的调度。
有人可以向我指出我错过了什么吗?
编辑:
正如第一个答案中所建议的,我尝试了以下方法:
import { visitLocation } from '../services/locationService';
import { fetchSomething } from '../services/otherService';
const visitLocationAction = (characterId, location) => {
return (dispatch) => {
return dispatch(visitLocation(characterId, location))
.then(() => dispatch(fetchSomething()));
};
};
export { visitLocationAction as visitLocation };
但我得到了 action:undefined 和以下错误:
Error: Actions must be plain objects. Use custom middleware for async actions.
at dispatch (redux.js:200)
at redux-logger.js:1