在Redux中间件中执行分派无法触发connect mapStateToProps中的状态更改

时间:2019-07-16 08:20:16

标签: reactjs redux react-redux middleware

我正在编写Redux中间件,并且我愿意在调用reducer函数之前和之后进行调度,示例中间件代码如下:

const myMiddleware = store => next => action => {
    dispatch({type: 'xxx', payload: { xxx: true }})

    next(action)

    dispatch({type: 'xxx', payload: { xxx: false }})
  }

我还使用react-redux将Redux存储与React连接起来,如下所示:

@connect((state, ownProps) => {
  ...

  return {
    xxx
  }
})
class MyComponent extends Component {
  render() {
    ....
    return (
      ....
    )
  }
}

但是为什么mapStateToProps总是返回xxx=false,而xxx可能是 Redux Devtool扩展程序观察到的正确与否?

1 个答案:

答案 0 :(得分:2)

因为调度是同步的,所以您需要在React有机会重新渲染之前将标志重置回false

如果您在mapState中添加一些日志记录,我将期望看到的是,mapState实际上正在为两个调度的动作运行。但是,直到完成整个调度序列后,React才会渲染,因此第一个更新将与第二个更新一起批处理,并且您永远不会看到带有true值的渲染。