React中性能优化的方案

  • 减轻state

    • 在state中只存储和组件渲染有关的数据

    • 不做渲染的数据不放在state中,直接挂载在this上即可,比如定时器的id

import { Component } from "react";

class App extends Component {
state = {
  num: 0
}
componentDidMount() {
  // dom渲染完成
  // 开启定时器
  // timerid 存储到this中,而不是state中
  this.timerId = setInterval(() => { }, 1000)
}
componentWillUnmount() {
  // 卸载
  clearInterval(this.timerId)
}
render() {
  return (
    <div id="app">
    </div>
  )
}
}
export default App
  • 避免不必要的重新渲染

    • 使用shoundComponentUpdate钩子函数手动更新组件

    • 使用纯组件 PureComponent自动更新组件,使用方式和component一致

      PureComponent会分别对前后两次props和state进行浅层对比

      浅层比较:

      对于基本数据类型直接比较两个值是否相同

      引用数据类型比较的是地址,所以不要直接修改state中的引用数据类型,应该创建一个新的实例

import { PureComponent } from "react";

class App extends PureComponent {
state = {
  num: 0
}
render() {
  console.log('render')
  return (
    <div id="app">
      <button onClick={this.handleClick}>点我</button>
      <hr />
      <div>{this.state.num}</div>
    </div>
  )
}
handleClick = () => {
  this.setState({
    num: parseInt(Math.random() * 3)
  })
}
}
export default App
 
posted @   杏仁豆腐真君  阅读(22)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示