我想知道connect()
ed子组件如果其父组件在false
中返回shouldComponentUpdate
,是否会重新呈现?
说,我们有一个看起来像这样的组件树
connect(Foo extends PureComponent)
DumbBar
connect(Baz extends PureComponent)
因此,如果Baz
提供给他们的道具保持不变,那么Foo
和mapStateToProps
都不应该重新渲染。但是,如果redux存储的状态发生变化并且connect()ed
Baz
组件被通知状态更改并且提供了新的道具,会发生什么?它会重新渲染,还是React的分层更新模型会阻止渲染?
或者整个问题可能有点过时,因为子组件新渲染不可能在不影响祖先的情况下生效 - 如果孩子改变,强迫祖先重新渲染?
如果最后一点是真的,那么将connect
ed组件作为PureComponent
的子组件是致命的,因为它会破坏您认为的所有优化,从而导致重新渲染父母子树中的其他地方。
答案 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来自行查看。