我有一个名为isMobile
的道具,可以显示外部iframe。当我在iPad上倾斜屏幕时,这将更改道具以更改值并重新渲染iframe(丢失iframe内部的所有进度)。
防止重新渲染的好方法是什么? docs说我不应该使用shouldComponentUpdate
,因为那只是性能优化。
答案 0 :(得分:4)
正如一些答案所说,您可以使用React.PureComponent
来避免由于任何原因而重新渲染它,因此您可以对其进行修复,将Iframe
分成一个单独的组件, React.PureComponent
就是这样:
class MyPureIframe extends React.PureComponent {
render() {
const {src, width, height} = this.props;
return (
<iframe src={src} width={width} height={height} {...whateverProps} />
);
}
}
class MyNormalView extends React.Component {
render() {
return (
<div>
<!--SOME MARKUP HERE-->
<MyPureIframe src={'https://your-url-to-iframe'} width={100} height={100} />
<!--SOME MARKUP HERE-->
</div>
);
}
}
因此,MyPureIframe
仅在其某些道具改变(src,宽度,高度或其他您传递的道具)时才会改变(重新渲染)。
通过这种方式,MyNormalView
中的任何东西都不会重新渲染,深层组件MyPureIframe
直到其任何道具更改后都不会重新渲染。
希望它能对您有所帮助。
答案 1 :(得分:0)
shouldComponentUpdate不是更好的方法。该文件说,将来可以忽略对shouldComponentUpdate的更改。
请尝试使用名为memoize
的概念,该概念比PureComponent更好