如果parent的`shouldComponentUpdate` = false,则重新渲染`connect()`ed子组件?

时间:2017-11-08 11:25:51

标签: reactjs redux react-redux

我想知道connect() ed子组件如果其父组件在false中返回shouldComponentUpdate,是否会重新呈现?

说,我们有一个看起来像这样的组件树

connect(Foo extends PureComponent)
    DumbBar
        connect(Baz extends PureComponent)

因此,如果Baz提供给他们的道具保持不变,那么FoomapStateToProps都不应该重新渲染。但是,如果redux存储的状态发生变化并且connect()ed Baz组件被通知状态更改并且提供了新的道具,会发生什么?它会重新渲染,还是React的分层更新模型会阻止渲染?

或者整个问题可能有点过时,因为子组件新渲染不可能在不影响祖先的情况下生效 - 如果孩子改变,强迫祖先重新渲染?

如果最后一点是真的,那么将connect ed组件作为PureComponent的子组件是致命的,因为它会破坏您认为的所有优化,从而导致重新渲染父母子树中的其他地方。

2 个答案:

答案 0 :(得分:1)

是的,它会重新渲染。

使用connect的整个想法 - 你不必通过道具,你可以将它嵌入任何地方 - 它会照顾你的组件保持最新

答案 1 :(得分:1)

使用public class MyClass { WindsorContainer Container; MyClass2 MyClass2; public MyClass(WindsorContainer container) { Container=container; MyClass2 = Container.Resolve<MyClass2>(); } } 构建的每个组件都会将其自己的订阅连接起来,以通知redux商店的更改。

因此,如果仅为子组件提供给connect的道具已更改,则子组件将重新呈现,而父组件将不会重新呈现。

您可以通过向渲染函数添加一个简单的console.log来自行查看。