reactjs - 使用中间件对每个动作调度额外动作
问题描述
export default ({ dispatch, getState }) => next => action => {
return next(action);
};
说错了请指正,以上应该是创建redux中间件的模板。我想知道是否可以在这个中间件中调度一个额外的动作?把它想象成一个记录器函数,我试图记录所有正在调度的操作。
我希望将其存储到另一个减速器中,而不是在这里进行控制台日志记录。
简而言之,这个想法是一个动作流过这个中间件,1 个原始动作 + 1 个日志动作都被调度
解决方案
不确定我是否收到您的问题if it's possible to dispatch an extra action in this middleware?
,但您可以发送任意数量的操作,例如:
export const getBooks = ({dispatch}) => next => action => {
next(action);
if (action.type === 'GET_BOOKS') {
dispatch({type:'API_REQUEST', payload:'yourUrl'});
}
if (action.type === 'SOMETHING_ELSE') dispatch(anotherAction());
};
然后你可以添加另一个中间件来观察这个中间件发送的动作,即
export const api = ({dispatch}) => next => action => {
if(action.type === 'API_REQUEST') {
const { url } = action.payload;
fetch(url).then(response => response.json())
.then((data) => dispatch({ type: 'onSuccess', payload: data }))
.catch(error => dispatch({ type: 'onError', payload: error }))
}
return next(action)
};
显然,在您的商店,第一个需要先于第二个,即
const middlewares = [getBooks, api];
const store = createStore(yourReducer,applyMiddleware(...middlewares));
推荐阅读
- ruby-on-rails - 如何从表单创建重定向 URL
- python - 如何在 Django 或 Flask 中嵌入交互式 Bokeh 或 Dash 应用程序*with authentication*?
- php - 如果有错误,则准备循环和回滚语句
- vba - Word VBA:插入分页符后,第1页上的我的文本框都转到第2页
- python - 为什么dict设置相同的atfer循环
- angular - 在 Angular2+ 中集成 PayU 支付网关 - API 如何与 Angular 客户端沟通支付完成?
- c# - 使用 EF、选择多次或使用包含哪个更好?
- javascript - jQuery 函数在 CodePen 中有效,但在 Node.js 服务器中无效
- javascript - 我有两个具有相同城市数据的下拉列表
- bootstrap-4 - Bootstrap - 自定义单选按钮