【发布时间】:2018-06-14 21:50:05
【问题描述】:
使用 PureComponent 来提高 React 中的渲染性能似乎是一种常见的技术。但是,使用以子作为道具的 PureComponent 时似乎并非如此。
class App extends React.PureComponent {
render() {
console.log('re-render')
return <div>{this.props.children}</div>
}
}
const render = () => {
ReactDOM.render(
<App>
<div />
</App>,
document.getElementById('app')
)
setTimeout(render, 1000)
}
render()
结果是控制台每 1 秒记录一次“重新渲染”。似乎 children(<div />) 是上面 App 组件的唯一道具并且永远不会改变,为什么 App 仍然被重新渲染?
注意:如果有任何混淆,问题是一样的,为什么上面 PureComponent 的 SCU(shouldComponentUpdate) 钩子返回 true,因为似乎没有任何道具发生变化?
【问题讨论】:
-
请问您为什么在
render内调用render?当您执行ReactDOM.render(..)时,您已经渲染了您的应用程序,然后您再次递归调用它。这不是导致您的应用被多次重新渲染吗? -
@margaretkru 我故意为它触发重新渲染以测试上面 App 纯组件的 SCU。补充说明:)
标签: performance reactjs components react-dom