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 重...