如果父组件卸载,则防止子道具更新

时间:2019-04-10 08:02:36

标签: reactjs react-redux

升级到最新的react-redux(v7)后,我在更新道具时遇到了问题。这是一个示例:

const shouldRender = WrappedComponent => props => props.shouldRender ? <WrappedComponent {...props} /> : null

const MyComponent = compose(
  connect(state => ({ shouldRender: Boolean(state.page) })),
  shouldRender,
  connect(state => ({ title: state.page.title }))
)(MyBaseComponent)

<MyComponent />

store.dispatch({ type: 'CLEAR_STATE' }) // => Sets state.page to null

在react-redux v5中,将state.page重置为其初始状态(空)时,shouldRender HOC将呈现null而不是组件,因此不会尝试获取state.page.title在下一行。

升级到v7后,同一场景仍然会触发state.page.title并引发错误(无法获得未定义的标题)。

最简单的解决方案是不依赖父HOC来保护道具(title: state.page && state.page.title,但这会在我的代码中到处引入保护措施。

如果父级已经卸载,如何防止最后一次连接mapStateToProps发生(因此不需要更改子级的prop,因为无论如何它都会被卸载)。

1 个答案:

答案 0 :(得分:0)

我通过升级到7.0.3修复了该问题