react组件性能优化笔记

一、减轻state
1.减轻state:只存储跟组件渲染相关的数据(比如:count/列表数据/loading等)
2.注意:不用做渲染的数据不要放在state中,比如定时器等
3.对于这种需要在多个方法中用到的数据,应该放在this中

class Mouse extends React.Component {
  //     state = {
  //       x: 0,
  //       y: 0
  //     }
  //     handleMouseMove = e => {
  //       this.setState({
  //         x: e.clientX,
  //         y: e.clientY
  //       })
  //     }
  //     componentDidMount() {
  //       window.addEventListener('mousemove', this.handleMouseMove)
  //     }
  //     // 组件消失时卸载鼠标移入事件
  //     componentWillUnmount() {
  //       window.removeEventListener('mousemove', this.handleMouseMove)
  //     }
  //     render() {
  //         console.log('Mouse高阶组件内', this.props)
  //       return (
  //         <div>
  //           <WrappedComponent {...this.state} {...this.props}></WrappedComponent> // 用在这里了
  //         </div>
  //       )
  //     }

在这里插入图片描述
二、避免不必要的重新渲染
1.组件更新机制:父组件更新会引起子组件也被更新,这种思路很清晰
2.问题:子组件没有任何变化时也会重新渲染
3.如何避免不必要的重新渲染呢?
4.解决方式:使用钩子函数shouldComponentUpdate(nextProps, nextState)。参数都表示最新的。this.state可以拿到更新前的状态
5.作用:通过返回值决定该组件是否重新渲染,返回true表示重新渲染,false表示不重新渲染
6.触发时机:更新阶段的钩子函数,组件重新渲染前执行(shouldComponentUpdate -> render)在这里插入图片描述
在这里插入图片描述
三、纯组件
1.纯组件:PureCompontent与React.Component功能相似
在这里插入图片描述
2.区别:PureComponent内部自动实现了shouldComponentUpdate钩子,不需要手动比较
3.原理:纯组件内部通过分别对比前后两次props和state的值,来决定是否重新渲染组件
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值