Component的2个问题:
1.只要执行setState() ,即便不改变状态数据,组件也会重新render() ==> 效率极低
2.只要当前组件重新render(),就会自动重新render子组件,即时子组件没有用到父组件的任何数据 ==> 数据低
效率高的做法:
只有当组件的state或者props数据发生改变时才重新render()
原因
Component中的shouldComponentUpdate这个生命周期钩子(控制state或props更新的阀门)不写即返回true
解决
方法1:重新shouldComponentUpdate() 方法
比较新旧state或props数据,如果有变化才返回true,否则返回false
例:
shouldComponentUpdate (nextProps, nextState){ // 接收两个形参 调用setState后的props和state
if (this.state.xxx === nextState.xxx) return false; // props同理
return true;
}
方法2:使用pureComponent标签
import { PureComponent } from 'react'
class A extends PureComponent {
......
}
这样当我们改变state或者props时,当数据真实发生变化时才会更新
(如果传的是Object类型的数据,React底层判断的逻辑是数据的引用地址是否发生变化)
27. React - PureComponent
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 最小堆特点是一棵完全二叉树,父节点小于子节点;采用数组存储。 代码详情 知识点 插入节点:将待插入节点放到数组末尾...
- React.Component最常见的,包含最常用的render(),componentDidMount(),sh...
- 1. React.Component 最常见的,包含最常用的render(),componentDidMount(...
- Example 比如,一个组件state里面有两个值,其中一个是某个input的value,另一个是记录somet...
- PureComponent 是和 shouldComponentUpdate这个生命周期息息相关的 React 重...