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

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

时间:2023-05-19 13:12:03浏览次数: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/17414811.html

相关文章

  • 面试官让你说说react状态管理?
    开发者普遍认为状态是组件的一部分,但是同时却又在剥离状态上不停的造轮子,这不是很矛盾么?对于一个最简单的文本组件而言functionText(){const[text,setText]=useState('载入')return(){<p>{text}</p>}}你觉得应该把text从Text组件中剥离么?如果......
  • 高级前端常考react面试题指南
    pureComponent和FunctionComponent区别PureComponent和Component完全相同,但是在shouldComponentUpdate实现中,PureComponent使用了props和state的浅比较。主要作用是用来提高某些特定场景的性能为什么虚拟DOM会提高性能虚拟DOM相当于在js和真实DOM中间加了一个缓存,利用DOM......
  • react-query-builder查询构建器中文文档
    简介react-query-builder是一个React组件库,用于构建可配置的查询构建器。使用react-query-builder,您可以轻松地构建复杂的查询表单,使用户能够以直观的方式构建和执行查询。以下是一些常见的用例:构建高级搜索表单,允许用户根据不同的条件搜索数据。在数据可视化应用程序中使用......
  • 大厂面试官带你Get求职面试核心技巧
    本文首发自[慕课网],想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"及“慕课网公众号”!作者:Brain|慕课网名师Hello,大家好,我是Brian老师,在开发领域摸爬滚打、锤炼了10年,大坑、小坑、团队管理、技术变革等问题层出不穷,也熬过无数的夜,运用各种方案解决问题,不过值得庆幸的是我......
  • distcp任务超时(Time out after 300 secs)的原因及优化方案
    distcp使用MapReduce执行数据复制操作时也可能会出现超时的情况,其可能的原因与普通MapReduce任务相似,包括以下几点:数据量过大:如果您的复制任务的数据量非常大,MapReduce任务可能需要更多时间来处理,从而导致超时。硬件不足:如果您的硬件资源不足以支持MapReduce任务,例如内存、C......
  • 接口优化技巧
     1.批处理批量思想:批量操作数据库,这个很好理解,我们在循环插入场景的接口中,可以在批处理执行完成后一次性插入或更新数据库,避免多次IO。//for循环单笔入库list.stream().forEatch(msg->{    insert();});//批量入库batchInsert();2.异步处理异步思想:针对耗时比较长且......
  • APP中RN页面热更新流程-ReactNative源码分析
    平时使用WebStorm或VSCode对RN工程中的文件修改后,在键盘上按一下快捷cmd+s进行文件保存,此时当前调试的RN页面就会自动进行刷新,这是RN开发相比于原生开发一个很大的优点:热更新。那么,从按一下快捷cmd+s到RN页面展示出最新的JS页面,这个过程是怎样发生的呢?下面根据时间顺序来梳理一下......
  • quasar [email protected] ssr Meta插件 使用 title无法reactive的bug
    为了使自己的网站SEO更友好,在项目里启用了quasar的Meta插件。但实际使用下来发现文档里的描述不正确。为了动态的更新title和meta信息,文档https://quasar.dev/quasar-plugins/meta里介绍ReactiveInthesectionabove,younoticedallofthemetapropsare“static”.But......
  • 从3s到25ms!看看京东的接口优化技巧,确实很优雅
    转载于:https://mp.weixin.qq.com/s/kIcBs_jE5wBnyD92K-anEQ大家好,最近看到京东云的一位大佬分享的接口优化方案,感觉挺不错的,拿来即用。建议收藏一波或者整理到自己的笔记本中,随时查阅!一、背景针对老项目,去年做了许多降本增效的事情,其中发现最多的就是接口耗时过长的问题,就集中......
  • [SEO经验分享]内链优化之-图片关键词分离
    本文转载自:[SEO经验分享]内链优化之-图片关键词分离更多内容请访问钻芒博客:https://www.zuanmang.net看了一场公开课,课程中有一部分讲了头部导航栏关键词分离。效果就是把传统的网站首页栏目,让百度的蜘蛛抓取来是自定义的关键词,但是用户访问仍显示为网站首页,实现不影响用户体验......