2

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

这两种实现有什么区别

4

2 回答 2

3

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

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

于 2017-10-16T11:41:46.260 回答
1

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

于 2017-10-16T12:14:07.603 回答