【发布时间】:2018-04-10 12:02:00
【问题描述】:
我有一个简单的 React 应用程序,它可以呈现 5000 种产品的名称和价格。价格是可编辑的,更改后价格会反映在状态中。
https://github.com/TonyCaffer/thinking-in-react-1
App.js 通过 onChangePrice 函数管理状态并处理价格变化,该函数被传递给 ProductTable 和每个 ProductRow
我使用 immutability-helpers 并且我专门只更改了已更改产品的状态记录。
但每次更改都会有明显的一秒延迟,因为 React 正在重新渲染所有产品。每个产品都有一个关键属性,我认为这有助于 React 只重新渲染必要的组件。
在生产版本中,它的滞后性较小,但所有产品都会重新渲染,这是我要解决的根本问题。
为什么要重新渲染所有产品组件?是因为我通过高级 ProductTable 传递 this.state.products 从而触发列表的总重绘?如果是这样,当状态在列表中时,每个 ProductRow 如何管理自己的记录状态?
【问题讨论】:
-
它不会停止重新渲染。他们的“关键”事物将调用之前调用的相同组件,并调用
componentWillUpdate而不是componentWillMount。要停止渲染,请使用shouldComponentUpdate停止重新渲染。