React拓展6-PureComponent

用于避免重复渲染(执行render函数),提高效率

Component的2个问题
  1. 当组件中运行方法setState({})。哪怕该方法的参数为一个空对象,该组件和其子组件都会被重新渲染

  2. 只当前组件重新render(), 就会自动重新render子组件 ==> 效率低

效率高的做法
  • 只有当组件的state或props数据发生改变时才重新render()
原因
  • Component中的shouldComponentUpdate()总是返回true
解决方法

办法1:
重写shouldComponentUpdate()方法
比较新旧state或props数据, 如果有变化才返回true, 如果没有返回false
办法2:
使用PureComponent
PureComponent重写了shouldComponentUpdate(), 只有state或props数据有变化才返回true
注意:
只是进行state和props数据的浅比较, 如果只是数据对象内部数据变了, 返回false
不要直接修改state数据, 而是要产生新数据
项目中一般使用PureComponent来优化

(1)PureComponent来自于React组件库
(2)PureComponent有一个问题,如果setState的参数与this.state是同一个对象的话,也不会更新组件。需要使用纯函数

state = {
  username: "Tom",
};
handExchange = () => {
  let obj = this.state;
  obj.username = "jack"
  this.setState({ obj });
};
shouldComponentUpdate(nextProps, nextState) {
  console.log(nextProps);
  console.log(nextState);
  return true;
}

应当改为

state = {
  username: "Tom",
};
handExchange = () => {
  let {username} = this.state;
  username = "jack"
  this.setState({ username });
};
shouldComponentUpdate(nextProps, nextState) {
  console.log(nextProps);
  console.log(nextState);
  return true;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值