我有一个 react 组件,我注意到每次所有者组件渲染时都会重新渲染,即使传递的 Prop 没有改变。
这是正常行为吗?我认为只有当所有者发送新的 Prop 时,组件才会重新渲染,即 Prop 更改为具有不同的值或某些内部状态更改。
假设上述情况成立,是否有任何技巧可以调试导致组件重新渲染的更改?
最佳答案
React 的重点是在实际 DOM 之上使用虚拟 DOM。 React 组件中的 render() 方法用于计算新的 VD,将其与之前的进行比较,并将 diff 应用于 AD。之间存在差异,例如React.DOM.div
和你的组件在另一个组件的 render()
方法中 - React 需要计算你的组件的 VD - 显然,因为它是 render( )
方法 - 即使没有传递任何 props。
但是,您可以使用 shouldComponentUpdate()
钩子(Hook)明确告诉 React 组件它是否调用它的 render()
方法。在 React.createClass()
表示法中,您可以使用 PureRenderMixin
,除了下一个代码注入(inject)之外什么也没有:
import shallowEqual from 'react/lib/shallowEqual';
shouldComponentUpdate(nextProps, nextState) {
return !shallowEqual(nextProps, this.props) || !shallowEqual(nextState, this.state);
}
有一些方法可以用 ES6 表示法来做到这一点 - 例如从 PureRenderComponent
继承,包含上述钩子(Hook)。
另请参阅https://facebook.github.io/react/docs/advanced-performance.html
关于reactjs - 每次父级重新渲染时都会调用 React 渲染方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32462937/