前端面试题回顾——React重要知识

news2024/11/24 4:29:29

文章目录

      • React相关问题
        • 1. 函数式组件与Class组件有什么不同?
        • 2. 说说React的fiber架构?
        • 3. 协调
        • 4. 虚拟DOM (Virtual DOM)

React相关问题

1. 函数式组件与Class组件有什么不同?

答:
① 函数式组件不需要继承,直接 “function+组件名” 就可以了;而class组件还需要继承 class DemoClass extends React.Component()
② 函数式组件没有 this 指向的问题,方法定义后直接调用;而class 组件中有this,要考虑 this 指向,事件还需要 bind 绑定
③ 函数式组件写法简单,无生命周期函数,直接用 useEffect 控制执行时机;而 class 需要一系列的生命周期函数控制,写法非常臃肿。相对而言,函数式写法开发效率较高。

附上 Class Component 的生命周期图谱:
react生命周期

2. 说说React的fiber架构?

fiber是为了提升性能所做的优化方案。分批延时的操作 DOM,避免一次性操作大量 DOM,造成浏览器阻塞。
可以理解为一个个纤程。它会把一个耗时很长的 diff 任务碎片化处理,分成多个小片,在每个小片执行完后给其他任务一个机会,不独占整个线程。
(1) 是一种让出机制,优先级较高的先执行。
(2) 保证任务在浏览器空闲时执行。

3. 协调

简单一句话总结:
React组件的 stateprops 发生变化时,会对比变化前后的 DOM 树 。React 会基于这两棵树之间的差异来判断是否更新实际的 UI,它们不相等时,React 才会更新 DOM。这个过程叫做 协调。

4. 虚拟DOM (Virtual DOM)

虚拟DOM就是内存中的DOM元素真实DOM元素 对比,对比方式是以JS对象的形式(即Object:{}),两者不相等时,会将虚拟 DOM 更新到真实 DOM树 中,进而映射到 UI 视图。
优点:避免了整棵 DOM 树变更。
步骤:
(1)用 JavaScript 对象 表示 DOM 树的结构;
(2)对比内存中的DOM与真实的DOM;
(3)发现不同时,只将不同的地方更新到真实DOM树中,更新 UI 视图。

性能优化的扩充知识:使用 key 属性标识在渲染过程中可能不变的子元素,减少内存开销。


文章持续更新中……React继续!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/157651.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构基础——认识数据结构与算法

目录 🍔什么是数据结构? 🌭1.数据的逻辑结构 🌭NUM 1 : 集合 🌭NUM 2 : 线性结构 🌭NUM 2 : 树形结构 🌭NUM 4 :图结构(网状结构)…

浅谈反弹shell

目录反弹shell总结一、文件描述符二、重定向1、输入重定向2、输出重定向3、错误输出重定向4、exec 绑定重定向三、实现反弹shell的几种方式方法一: find 反弹ubuntu find反弹shell失败的问题任务计划反弹shell失败的问题方法二:使用python反弹&#xff0…

Flink系列-4、Flink运行架构

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 大数据系列文章目录 官方网址:https://flink.apache.org/ 学习资料:https://flink-learning.org.cn/ 目录Flink基石Fli…

刚当上leader,我让组员去开会,他非说有更重要的会

☆ 职场上经常有那么一种情况就是组长喊组员开会,开周会,开晨会,开各种会,而更有一种常见的情况呢就是组长缺失威严,喊组员开会,组员不听话,说有更重要的会议,不想参加。 ☆ 本文将以…

VIT学习心得

来源:投稿 作者:橡皮 编辑:学姐 小声逼逼 在过去的两年里,Vision Transformer(ViT)是计算机视觉(cv)领域最有影响力的工作之一。「它推翻了2012年在Alex net中提出的CNN在CV领域的统治地位: 当能够获得足够多的预训练…

无接触式磁旋转编码器AS5040介绍

无接触式磁旋转编码器AS5040简介AS5040 是一款无接触式磁旋转编码器,用于精确测量整个360内的角度。此产品是一个片上系统,在单个封装内整合了集成式Hall 元件、模拟前端和数据信号处理功能。测量角度时,只需简单地配备1 个在芯片中心上方旋转…

Spring5的全细节回顾总结

概述: https://cntofu.com/book/95/33-what-new-in-the-spring-framework.md 这个不错。 轻量级javaee框架。 针对于bean的生命周期进行管理。 解决企业应用开发的复杂性。 核心: ​ IOC:控制反转,把创建对象的过程交给sprin…

第一天 Blender操作 | 大帅老猿threejs特训【超详细】

前言 这一天主要是基础理论的学习。 本人学习资料仓库 https://gitee.com/zhang_dezheng_hsr/three-demo.git YCY-TrainingCamp-S2: 在原有的文件上添加本人的学习记录 第一天 Blender操作 | 大帅老猿threejs特训【超详细】【我在掘金的同名文章】 一、大纲 二、THREE 基础概…

Linux查看某个应用的CPU/内存/网卡使用情况

1.查看CPU的使用率 # ps -ef | grep zabbix 进程号是1715 # top -p 1715 可以看到CPU的使用率是0 , 内存的使用率是0 2.查看内存真实使用了多少 #cat /proc/[pid]/status #cat /proc/1715/status VmPeak:进程所使用的虚拟内存的峰值 VmSize: 进程当前使用…

22.字符串初始化方法及赋值,字符串和指针总结

目录 初始化 1.字符数组初始化 2.指针指向文字常量区,初始化 3.指针指向堆区,堆区存放字符串 使用时赋值 1.字符数组,使用scanf或者strcpy 2.指针指向文字常量区 3.指针指向堆区,堆区存放字符串 初始化 1.字符数组初始化 …

各国家语言代码对照表

来源如下 Language Code Tablehttp://www.lingoes.cn/zh/translator/langcode.htm 详情如下 语言代码语言名称af南非语af-ZA南非语ar阿拉伯语ar-AE阿拉伯语(阿联酋)ar-BH阿拉伯语(巴林)ar-DZ阿拉伯语(阿尔及利亚)ar-EG阿拉伯语(埃及)ar-IQ阿拉伯语(伊拉克)ar-JO阿拉伯语(约旦…

万字详解 Linux 网络管理

万字详解 Linux 网络管理1.Linux处理数据包过程2.和网络相关的几个文件说明网卡配置文件ifcfg-*DNS配置文件/etc/resolv.conf(CentOS6环境)/etc/services3.网络接口配置和主机名ifconfigifcfghostname命令4.网关/路由5.网关/路由相关命令route命令配置永…

netty(1):NIO 基础之三大组件

1 三大组件 1.1 Channel & Buffer channel 有一点类似于 stream,它就是读写数据的双向通道,可以从 channel 将数据读入 buffer,也可以将 buffer 的数据写入 channel,而之前的 stream 要么是输入,要么是输出&…

如何用idea快速的debug本地程序

介绍大家都经常用idea开发, 开发过程中运行程序就会出现各种意料之外的异常, 如果解决这些异常, 尤其是三方jar包抛出的异常,就是一个很关键和棘手的问题.配置环境在第一个选项位置点开后会弹出配置页面,里面可以配置一些启动需要的环境变量.第二个是debug启动按钮第三个是程序…

SQL 优化方案(规范)

SQL优化1、SQL执行顺序2、前置条件2.1、使用explain分析SQL执行计划2.2、开启慢sql日志2.3、慢查询时间设置。默认情况下long_query_time的值为10秒,可以使用命令修改,也可以在my.cnf参数里面修改。3、基础Sql优化3.1、小表驱动大表3.2、高效的分页3.3、…

【linux入门】Linux基础知识学习笔记

文章目录【第一章-宏观知识】1.硬件和软件的关系2.操作系统 是什么、作用是什么3.常见的操作系统4.Linux的诞生5.Linux内核 是什么6.Linux发行版 是什么7.WSL是什么8.虚拟机快照9.FinalShell(Xshell替代品)【第二章-Linux基础命令】1.Linux目录结构2.什么…

Linux下ElasticSearch安装和基本使用

安装 下载安装目录:/home/es-7.12.0 es启动用户:zmsz 出于安全考虑,elasticsearch默认不允许以root账号运行,所有一定要创建一个其他用户执行启动命令,不然一定会报错!! 创建用户:useradd zmsz 设置密码:passwd zmsz下载解压 下载:官网 以最新版8.6为准,执行wget …

MySQL中的limit分页的使用

SQL准备 create table tb_students (id int auto_increment primary key comment 主键ID,studentid char(9) unique not null comment 学生学号,name varchar(10) not null comment 学生姓名,gender char(1) not null comment 学生性别 ) comment 学生表;insert into tb_stude…

【机器学习 - 2】:数据集的处理

文章目录训练集和数据集分离获取最优模型超参数寻找最优模型网格搜索的使用训练集和数据集分离 训练集和数据集分离的原理:当我们获取一个数据集时,我们需要将其一小部分拿出来作为测试集,剩余的作为训练集。例如对于一个训练集,将…

RocketChip RISC-V生成RTL到仿真全流程

一、Scala配置项修改和RTL代码生成可以通过对scala中的配置项修改,来达到定制化配置RISC-V的目的,这里总结几个比较常用的配置项、配置项含义和所在的scala中的位置:1.$rocket-chip/src/main/scala/system/Config.scala1)new With…