我的目标是渲染一个子组件而不重新渲染它的父组件。
因此,例如,App 的状态作为道具直接传递给 Column 组件,但 Column 是 Table 的子组件,并且 Table 已ShouldComponentUpdate
设置为 false(例如,表数据没有更改..)。
问题..如果应用程序状态发生变化,列组件不会更新..除非在表组件上ShouldComponentUpdate
设置为true
..这有什么问题吗?
文档确实说
返回 false 不会阻止子组件在其状态更改时重新渲染。
但没有提到他们的道具是否改变..
出于测试目的,我在这里创建了一个演示https://codesandbox.io/s/k2072rkp7o
代码预览:
const Column = ({ isSelected, onClick, children }) => (
<div
style={{
backgroundColor: isSelected ? 'green' : 'red',
padding: '10px',
}}
onClick={onClick}
>
Column: {children}
</div>
);
const Row = ({children }) => (
<div
style={{
backgroundColor: 'teal',
padding: '10px'
}}
>
Row {children}
</div>
)
class Table extends React.Component {
shouldComponentUpdate() {
// There will be logic here to compare table data to see if its changed..
return false
}
render() {
return (
<div
style={{
backgroundColor: '#ccc',
padding: '10px'
}}>
Table {this.props.children}
</div>
)
}
}
class App extends React.Component {
constructor() {
super();
this.state = {
isSelected: false
};
}
render() {
return (
<Table>
<Row>
<Column
isSelected={this.state.isSelected}
onClick={() => this.setState({
isSelected: !this.state.isSelected
})}
/>
</Row>
</Table>
)
}
}