记录显示我的父组件正在重新渲染自身。
但子组件的渲染方法没有被调用。
我以为子组件会根据以下这个逻辑进行重新渲染,但我认为我是错误的。 当父组件重新渲染时,React如何决定重新渲染哪些子组件?
- 父组件的渲染
- -> 调用子组件的
shouldComponentUpdate
- -> 如果
shouldComponentUpdate
返回true,则子组件会重新渲染
父组件的渲染看起来像:
render() {
let { viewConfig } = this.props
console.log("ViewConfigSettingBase rendering")
return (
<div>
{
Object.keys(viewConfig.availableSubviewConfigMap).map((sectionName, index) => {
var subviewConfigData = viewConfig.availableSubviewConfigMap[sectionName]
return (
<ViewConfigSettingRow
key={sectionName}
viewConfigData={subviewConfigData}
sectionName={sectionName}
parentViewConfig={viewConfig}
/>
)
})
}
</div>
)
}
PureComponent
与Component
的不同之处在于前者在shouldComponentUpdate
中实现了浅比较,而后者总是返回true
。无论是否为纯组件,如果SCU
返回false
,则不会调用渲染,甚至子组件也不会重新渲染,它们也不会接收到新的 props。但是,如果其state
被更改(人为地),则子组件可以重新渲染,即使父组件没有重新渲染。对吗? - Qwerty