双连通组件中的听众顺序

时间:2016-12-09 19:40:42

标签: redux react-redux

让我们有两个react-redux connect由一些其他更高阶的组件组成:

export default compose(
  connect((state) => {
    console.log('In outer connect')
    return state
  }),
  requireAuthState(isLoggedIn, '/'),
  connect(
    (state) => {
      console.log('In inner connect')
      return state
    },
    (dispatch, props) => ({
      ...
    })
  ),
)(Profile)

我注意到如果更改state,则首先调用与内部连接相关的侦听器。在这种情况下,控制台日志将是:

In inner connect
In outer connect

这是一个错误或一个功能,或者不应该假设react-redux处理重新呈现连接组件的顺序是什么?

在这种特殊情况下,这给我带来了问题。 requireAuthState h.o.c.有时(取决于应用程序状态)不会渲染其子项。但是,内部连接尝试重新渲染,然后导致错误。

1 个答案:

答案 0 :(得分:2)

是的,这是React-Redux到v4的已知问题。包装器组件在componentDidMount中订阅,从底部到顶部触发,因此子组件很可能在父母之前订阅。

即将推出的React-Redux v5(将hopefully be released shortly)通过强制执行自上而下订阅来解决此问题,这也有助于提高性能。有关详细信息,请参阅React-Redux PR #416,以及release notes