首页 > 其他分享 >面试官:React怎么做性能优化

面试官:React怎么做性能优化

时间:2023-01-02 10:34:14浏览次数:38  
标签:面试官 Parent Child React state props 组件 优化

前言

最近一直在学习关于React方面的知识,并有幸正好得到一个机会将其用在了实际的项目中。所以我打算以博客的形式,将我在学习和开发(React)过程中遇到的问题记录下来。

这两天遇到了关于组件不必要的重复渲染问题,看了很多遍官方文档以及网上各位大大们的介绍,下面我会通过一些demo结合自己的理解进行汇总,并以此作为学习React的第一篇笔记(自己学习,什么都好,就是费头发...)。

本文主要介绍以下三种优化方式(三种方式有着相似的实现原理):

  • shouldComponentUpdate
  • React.PureComponent
  • React.memo

其中shouldComponentUpdateReact.PureComponent是类组件中的优化方式,而React.memo是函数组件中的优化方式。

引出问题

  1. 新建Parent类组件。
import React, { Component } from 'react'
import Child from './Child'

class Parent extends Component {
  constructor(props) {
    super(props)
    this.state = {
      parentInfo: 'parent',
      sonInfo: 'son'
    }
    this.changeParentInfo = this.changeParentInfo.bind(this)
  }

  changeParentInfo() {
    this.setState({
      parentInfo: `改变了父组件state:${Date.now()}`
    })
  }

  render() {
    console.log('Parent Component render')
    return (
      <div>
        <p>{this.state.parentInfo}</p>
        <button onClick={this.changeParentInfo}>改变父组件state</button>
        <br/>
        <Child son={this.state.sonInfo}></Child>
      </div>
    )
  }
}

export default Parent
  1. 新建Child类组件。
import React, {Component} from 'react'

class Child extends Component {
  constructor(props) {
    super(props)
    this.state = {}
  }

  render() {
    console.log('Child Component render')
    return (
      <div>
        这里是child子组件:        <p>{this.props.son}</p>
      </div>
    )
  }
}

export default Child
  1. 打开控制台,我们可以看到控制台中先后输出了Parent Component renderChild Component render 点击按钮,我们会发现又输出了一遍Parent Component renderChild Component render 点击按钮时我们只改变了父组件Parentstate中的parentInfo的值,Parent更新的同时子组件Child也进行了重新渲染,这肯定是我们不愿意看到的。所以下面我们就围绕这个问题介绍本文的主要内容。

shouldComponentUpdate

React提供了生命周期函数shouldComponentUpdate(),根据它的返回值(true | false),判断 React 组件的输出是否受当前 state 或 props 更改的影响。默认行为是 state 每次发生变化组件都会重新渲染(这也就说明了上面

标签:面试官,Parent,Child,React,state,props,组件,优化
From: https://www.cnblogs.com/beifeng1996/p/17019479.html

相关文章

  • 面试官让你说说react状态管理?
    开发者普遍认为状态是组件的一部分,但是同时却又在剥离状态上不停的造轮子,这不是很矛盾么?对于一个最简单的文本组件而言functionText(){const[text,setText]=......
  • 校招前端一面经典react面试题(附答案)
    React.forwardRef是什么?它有什么作用?React.forwardRef会创建一个React组件,这个组件能够将其接受的ref属性转发到其组件树下的另一个组件中。这种技术并不常见,但在以下......
  • 2022前端二面react面试题(边面边更)
    何为JSXJSX是JavaScript语法的一种语法扩展,并拥有JavaScript的全部功能。JSX生产React"元素",你可以将任何的JavaScript表达式封装在花括号里,然后将其嵌入到JS......
  • 17、前端基础-ES6---Object对象优化
    ......
  • HBase 写优化之 BulkLoad 实现数据快速入库
    目录[-]​​1、为何要 BulkLoad导入?传统的 HTableOutputFormat写HBase有什么问题?​​​​2、bulkload 流程与实践​​​​3、说明与注意事项:​​​​4、Refer:​​......
  • 黏菌优化算法SMA(Matlab完整代码实现)求解热电联产经济调度问题的改进遗传与粒子群算法S
    黏菌优化算法SMA在电力系统中虽然有所应用,但是发表的文章还是比较少的,所有这个算法的应用空间还很广,推荐推荐:对于这两篇文献,我写过相关的文章,先回顾一下,然后再开始今天的话......
  • 【保姆级】包体积优化教程
    市面上有很多优化方案,但是都没有一个完整的链路体系,现在它来了,本文将带你进阶新高度,不管是面试、绩效KPI,还是汇报宣讲,都能让你游刃有余!前置必读:​​Android包体积优化(常规、......
  • 【React自学笔记08】React18Hook补充
    关于钩子函数的使用注意事项:钩子只能在React组件和自定义钩子中使用钩子不能在嵌套函数或其他语句(if、switch、white、for等)中使用React中自带的钩子函数useStateu......
  • OpenCV常见的优化方法和技巧总结
    OpenCV常见的优化方法和技巧总结目录​​OpenCV常见的优化方法和技巧总结​​​​ 一、OpenCV常见的优化方法总结​​​​1.1cv::imread()设置reduce模式:​​​​1.2查表......
  • 机器学习中的优化算法!
     Datawhale干货 作者:李祖贤,Datawhale高校群成员,深圳大学在机器学习中,有很多的问题并没有解析形式的解,或者有解析形式的解但是计算量很大(譬如,超定问题的最小二乘解),对于此类......