我有一个反应组件,我注意到每次所有者组件呈现时都会被重新呈现,即使传递的道具没有改变。
这是正常行为吗?我认为一个组件只有在所有者发送新道具时才会重新渲染,即道具被更改后具有不同的值或某些内部状态变化。
假设上述情况属实,是否有任何技巧可以调试正在改变的内容以使组件重新渲染?
答案 0 :(得分:4)
React的重点是在实际DOM之上使用Virtual DOM。 React Component中的render()
方法用于计算新VD,将其与之前的比较,并将diff应用于AD。并且例如之间存在差异。 React.DOM.div
和另一个组件的render()
方法中的组件 - React需要计算组件的VD - 显然,由于它的render()
方法 - 即使没有传递道具
但是,如果它使用render()
挂钩调用它的shouldComponentUpdate()
方法,你可以明确告诉React Component。在React.createClass()
表示法中,您可以使用PureRenderMixin
,除了下一次代码注入之外什么都不是:
import shallowEqual from 'react/lib/shallowEqual';
shouldComponentUpdate(nextProps, nextState) {
return !shallowEqual(nextProps, this.props) || !shallowEqual(nextState, this.state);
}
在ES6表示法中有一些方法可以做到这一点 - 例如继承自PureRenderComponent
,包含上述钩子。
另见https://facebook.github.io/react/docs/advanced-performance.html