在我的redux项目中,我想在每个动作调度中检查一些内容(例如网络连接)。我应该使用减速器来实现,该减速器接受所有类型的动作(没有类型检查),如下所示
export default (state = defaultState) => ({
...state,
neworkStatus: navigator.onLine
})
或使用中间件。
const NetworkMiddleware = store => next => (action) => {
const result = next(action)
const state = store.getState()
if (navigator.onLine && !state.NetworkDetector.networkStatus) next({ type: 'NETWORK_SUCCESS' })
if (!navigator.onLine && state.NetworkDetector.networkStatus) next({ type: 'NETWORK_ERROR' })
return result
}
export default NetworkMiddleware;
这两个实现之间有什么区别
答案 0 :(得分:3)
它提供了一个调度之间的第三方扩展点 动作,以及它到达减速器的那一刻。人们使用Redux 用于记录,崩溃报告,与异步通信的中间件 API,路由等。
我认为使用中间件来分析网络活动会更好。请阅读这些Redux docs以获取更多信息。
答案 1 :(得分:1)
redux中的中间件在进入reducer之前拦截动作并执行某些特定活动以更新状态。中间件旨在执行此类操作,而无需对存储中的状态进行更改。如果通过编写reducer执行此类跟踪或修改,则最终会在商店中维护此活动的状态,这可能与组件更新或重新呈现无关。这不是我认为的好习惯,也不符合框架设计。因此,最好通过使用中间件来实现它。