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

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

时间:2022-10-05 08:22:06浏览次数:67  
标签:面试官 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也进行了重新渲染,这肯定是我们不愿意看到的。所以下面我们就围绕这个问题介绍本文的主要内容。

更多面试题 前端react面试题详细解答

shouldComponentUpdate

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

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

相关文章

  • React-Hooks怎样封装防抖和节流-面试真题
    Debouncedebounce原意消除抖动,对于事件触发频繁的场景,只有最后由程序控制的事件是有效的。防抖函数,我们需要做的是在一件事触发的时候设置一个定时器使事件延迟发生,在......
  • 原始递归函数及模拟运行的优化
    看到网上一个题目,证明x开y次方是原始递归函数(primitiverecursivefunction)。这个问题并不难,只要把x开y次方实现出来即可。于是,正好把《递归论》相关内容补一补。【......
  • 组合数,计算上的优化
    逆元的主要用处,当求a/b模p时,a与b过大,就可以用逆元,求出b的逆元,一般是pow(b,p-2),a/b及等于a*b逆。组合数使用了这一个特性,求出阶乘的逆1intfac[N]//表示阶乘;2int......
  • 我的NVIDIA开发者之旅——优化显卡性能
    在我们购买任何一样东西时都是更具需求而决定的,买电脑也是,有时是为了办公,就买轻薄本;有些是为了玩游戏,就买游戏本。不同的需求会导致我们购买电脑的硬件有所不同,玩游戏最看重......
  • 面试官:Redis 过期删除策略和内存淘汰策略有什么区别?
    作者:小林coding​大家好,我是小林。Redis的「内存淘汰策略」和「过期删除策略」,很多小伙伴容易混淆,这两个机制虽然都是做删除的操作,但是触发的条件和使用的策略都是不同的。......
  • 李沐:用随机梯度下降来优化人生!
     Datawhale推荐 作者:李沐,CMU,亚马逊首席科学家1.要有目标。你需要有目标。短的也好,长的也好。认真定下的也好,别人那里捡的也好。就跟随机梯度下降需要有个目标函数一样。2.......
  • 深度剖析React懒加载原理
    目录代码分割React的懒加载import()原理React.lazy原理Suspense原理参考1.代码分割(1)为什么要进行代码分割?现在前端项目基本都采用打包技术,比如Webpack,JS......
  • 二分查找算法的起步判定优化
    packagecom.example.grokkingalgorithmsdemo.binarysearch;importlombok.extern.slf4j.Slf4j;/***@Author:Frank*@Date:2022-06-0412:12*/@Slf4jpublicclassBin......
  • HBase的优化
    一、HBase索引案例(使用redis存储索引)在这里是简单模拟将索引存到redis中,再通过先查询索引再将Hbase中的数据查询出来。需要考虑的问题:1、建立redis的连接,建立Hba......
  • 关于MC服务器的优化启动
    azul的zing优化jdk可以免费体验实际使用的时候却发现经常闪退,需要用以下参数运行java-Xms10G-Xmx10G-XX:+UseShenandoahGC-XX:+UseTrueObjectsForUnsafe-XX:+Paral......