Redux中间件和reducer接受所有操作之间的区别

时间:2017-10-16 11:38:20

标签: javascript reactjs redux redux-middleware

在我的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;

这两个实现之间有什么区别

2 个答案:

答案 0 :(得分:3)

  

它提供了一个调度之间的第三方扩展点   动作,以及它到达减速器的那一刻。人们使用Redux   用于记录,崩溃报告,与异步通信的中间件   API,路由等。

我认为使用中间件来分析网络活动会更好。请阅读这些Redux docs以获取更多信息。

答案 1 :(得分:1)

redux中的中间件在进入reducer之前拦截动作并执行某些特定活动以更新状态。中间件旨在执行此类操作,而无需对存储中的状态进行更改。如果通过编写reducer执行此类跟踪或修改,则最终会在商店中维护此活动的状态,这可能与组件更新或重新呈现无关。这不是我认为的好习惯,也不符合框架设计。因此,最好通过使用中间件来实现它。