2024 高级前端面试题之 React 「精选篇」

该内容主要整理关于 React 模块的相关面试题,其他内容面试题请移步至 「最新最全的前端面试题集锦」 查看。

React模块精选篇

  • 1. 如何理解React State不可变性的原则
  • 2. JSX本质
  • 3. React合成事件机制
  • 4. setState和batchUpdate机制
  • 5. 组件渲染和更新过程
  • 6. Diff算法相关
  • 7. 受控组件与非受控组件
  • 8. 组件生命周期
  • 9. Portal传送门
  • 10. Context
  • 11. 异步组件
  • 12. 性能优化
  • 13. 高阶组件和Render Props
  • 14. React Hooks相关
  • 15. Redux相关
  • 16. React中Ref几种创建方
  • 17. 为什么 React 元素有一个 $$typeof 属性
  • 18. React 如何区分 Class组件 和 Function组件
  • 19. react组件的划分业务组件技术组件
  • 20. React如何进行组件/逻辑复用?
  • 21. 说说你用react有什么坑点
  • 22. react和vue的区别
  • 23. React18新增了哪些特性


1. 如何理解React State不可变性的原则

在 React 中,不可变性是指数据一旦被创建,就不能被修改。React 推崇使用不可变数据的原则,这意味着在更新数据时,应该创建新的数据对象而不是直接修改现有的数据。

以下是理解 React 中不可变性原则的几个关键点:

  1. 数据一旦创建就不能被修改:在 React 中,组件的状态(state)和属性(props)应该被视为不可变的。一旦创建了状态或属性对象,就不应该直接修改它们的值。这样可以确保组件的数据在更新时是不可变的,从而避免意外的数据改变和副作用。
  2. 创建新的数据对象:当需要更新状态或属性时,应该创建新的数据对象。这可以通过使用对象展开运算符、数组的 concat()slice() 等方法,或者使用不可变数据库(如 Immutable.jsImmer 等)来创建新的数据副本。
  3. 比较数据变化:React 使用 Virtual DOM 来比较前后两个状态树的差异,并仅更新需要更新的部分。通过使用不可变数据,React 可以更高效地进行比较,因为它可以简单地比较对象引用是否相等,而不必逐个比较对象的属性。
  4. 性能优化:使用不可变数据可以带来性能上的优势。由于 React 可以更轻松地比较前后状态的差异,可以减少不必要的重新渲染和组件更新,提高应用的性能和响应性。

不可变性的原则在 React 中有以下好处:

  1. 简化数据变更追踪:由于数据不可变,可以更轻松地追踪数据的变化。这样可以更好地理解代码的行为和数据的流动。
  2. 避免副作用:可变数据容易引发副作用和难以追踪的 bug。通过使用不可变数据,可以避免许多与副作用相关的问题。
  3. 方便的历史记录和回滚:不可变数据使得记录和回滚应用状态的历史变得更容易。可以在不改变原始数据的情况下,创建和保存不同时间点的数据快照

2. JSX本质

3. React合成事件机制

4. setState和batchUpdate机制

  • setState主流程
  • batchUpdate机制
  • transaction事务机制
  • 传入 setState 函数的第二个参数的作用是什么
  • 调用 setState 之后发生了什么
  • setState总结

5. 组件渲染和更新过程

6. Diff算法相关

  • 为什么虚拟dom会提高性能
  • react 的渲染过程中,兄弟节点之间是怎么处理的?也就是 key 值不一样的时候
  • diff算法
  • Diff 的瓶颈以及 React 的应对
  • React 中 key 的作用是什么
  • 关于Fiber

7. 受控组件与非受控组件

  • 受控组件
  • 非受控组件

8. 组件生命周期

  • react旧版生命周期函数
  • 新版生命周期
  • 为什么有些react生命周期钩子被标记为UNSAFE
  • 在生命周期中的哪一步你应该发起 AJAX 请求

9. Portal传送门

10. Context

11. 异步组件

12. 性能优化

  • 使用shouldComponentUpdate优化
  • PureComponent和React.memo
  • 优化性能的方式小结
  • React实现的移动应用中,如果出现卡顿,有哪些可以考虑的优化方案

13. 高阶组件和Render Props

  • 高阶组件
  • render props
  • 拓展:vue中实现高阶组件

14. React Hooks相关

  • React Hooks带来了那些便利
  • class组件存在哪些问题
  • 用useState实现state和setState功能
  • 用useEffect模拟组件生命周期
  • 用useEffect模拟WillUnMount时的注意事项
  • useRef和useContext
  • useRef
  • useContext
  • useReducer能代替redux吗
  • 使用useMemo做性能优化
  • 使用useCallback做性能优化
  • 什么是自定义Hook
  • 使用Hooks的两条重要规则
  • 为何Hooks要依赖于调用顺序
  • class组件逻辑复用有哪些问题
  • Hooks组件逻辑复用有哪些好处
  • Hooks使用中的几个注意事项

15. Redux相关

  • 简述flux 思想
  • redux中间件
  • redux有什么缺点
  • Redux设计理念
  • Redux怎么实现dispstch一个函数
  • connect高级组件原理
  • Dva工作原理

16. React中Ref几种创建方

  • 三种使用 Ref 的方式
  • 使用Ref获取组件实例
  • 函数组件传递forwardRef
  • useImperativeHandle

17. 为什么 React 元素有一个 $$typeof 属性

18. React 如何区分 Class组件 和 Function组件

19. react组件的划分业务组件技术组件

20. React如何进行组件/逻辑复用?

21. 说说你用react有什么坑点

22. react和vue的区别

  • 前言介绍
  • vdom
  • dsl 的编译
  • 渲染 vdom
  • 组件
  • 状态管理
  • react 架构的演变
  • fiber 架构

23. React18新增了哪些特性

  • 前言
  • 新特性一览
  • Render API
  • setState合并更新
  • flushSync
  • 改进Suspense
  • 支持Concurrent模式
  • 组件返回undefined不再报错
  • startTransition
  • useDeferredValue

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

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

相关文章

windows server 开启远程连接RDP连接

windows server 开启远程连接,RDP连接windows server 打开gpedit.msc, 找到计算机配置-管理模板-windows组件-远程桌面服务-远程桌面会话主机-授权 1 使用指定的远程桌面许可证服务器 2 设置远程桌面授权模式 3 重启windows server服务器生效 4使用mstsc命令连接…

未来每家公司都需要有自己的大模型- Hugging Face创始人分享

自ChatGPT发布以来,有人称其是统治性一切的模型。Hugging Face创始人兼首席执行官Clem Delangue介绍,Hugging Face平台已经有15000家公司分享了25万个开源模型,当然这些公司不会为了训练模型而训练模型,因为训练模型需要投入大量资…

Springboot自定义线程池实现多线程任务

1. 在启动类添加EnableAsync注解 2.自定义线程池 package com.bt.springboot.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTask…

记录 | ubuntu nm命令的基本使用

什么是nm命令 nm命令是linux下针对某些特定文件的分析工具,能够列出库文件(.a、.lib)、目标文件(*.o)、可执行文件的符号表。 nm命令的常用参数 -A 或 -o 或 --print-file-name:打印出每个符号属于的文件…

webassembly003 TTS BARK.CPP

TTS task TTS(Text-to-Speech)任务是一种自然语言处理(NLP)任务,其中模型的目标是将输入的文本转换为声音,实现自动语音合成。具体来说,模型需要理解输入的文本并生成对应的语音输出&#xff0…

Mysql 为表增加计算列

什么叫计算列呢?简单来说就是某一列的值是通过别的列计算得来的。 增加计算列的语法格式如下: col_name data_type [GENERATED ALWAYS] AS (expression) [VIRTUAL | STORED] [UNIQUE [KEY]] [COMMENT comment] [NOT NULL | NULL] [[PRIMARY] KEY]; 下…

c++学习记录 多态—案例2—电脑组装

#include<iostream> using namespace std;//抽象不同的零件//抽象的cpu类 class Cpu { public://抽象的计算函数virtual void calculate() 0; };//抽象的显卡类 class VideoCard { public://抽象的显示函数virtual void display() 0; };//抽象的内存条类 class Memory …

华为通用软件开发工程师24校招三轮面试详细记录

本文介绍2024届秋招中&#xff0c;华为技术有限公司的通用软件开发工程师岗位的3场面试基本情况、提问问题等。 7月投递了华为技术有限公司的通用软件开发工程师岗位&#xff0c;所在部门为海思半导体与器件业务部。目前完成了一面、二面与三面等全部流程&#xff0c;在这里记录…

K210 UART串口通信介绍与 STM32通信

目录 K210-UART串口通信相关函数&#xff1a; 使用K210串口的时候需要映射引脚&#xff1a; K210与STM32串口通信 发送单字节&#xff1a; K210端 STM32端 发送数据包 K210端 STM32端 K210的UART模块支持全双工通信&#xff0c;可以同时进行数据的发送和接收。在K21…

Nginx启用WebSocket支持

报错内容nginx.conf proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; 问题解决WebSocket跨域 add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Credentials true;

常用芯片学习——AMS1117芯片

AMS1117 1A 低压差线性稳压器 使用说明 AMS1117 是一款低压差线性稳压电路&#xff0c;该电路输出电流能力为1A。该系列电路包含固定输出电压版本和可调输出电压版本&#xff0c;其输出电压精度为士1.5%。为了保证芯片和电源系统的稳定性&#xff0c;XBLWAMS1117 内置热保护和…

对鸢尾花进行分类预测-----pycharm

项目说明 #项目&#xff1a; 对鸢尾花进行分类预测 #实例数量150个(3类各50个) #属性数量&#xff1a;4(数值型&#xff0c;数值型&#xff0c;帮助预测的属性和类) #特征&#xff1a;花萼长度&#xff0c;花萼宽度&#xff0c;花瓣长度&#xff0c;花瓣宽度 单位&#xff1…

SVG 字体 – SVG defs(15)

简介 defs 元素中嵌套了在SVG图片中可重用的定义。在def元素内定义的图形不会展示在SVG图片上。必须通过use元素来引用。 例子 <svg width="500" height="500"><defs>

什么是事务?

事务 是一组操作的集合&#xff0c;它是一个不可分割的工作单位。事务会把所有的操作作为一个整体&#xff0c;一起向数据库提交或者是撤销操作请求。所以这组操作要么同时成功&#xff0c;要么同时失败。 1. 事务管理 怎么样来控制这组操作&#xff0c;让这组操作同时成功或…

【MySQL复制】半同步复制

介绍 除了内置的异步复制之外&#xff0c;MySQL 5.7 还支持通过插件实现的半同步复制接口。本节讨论半同步复制的概念及其工作原理。接下来的部分将涵盖与半同步复制相关的管理界面&#xff0c;以及如何安装、配置和监控它。 异步复制 MySQL 复制默认是异步的。源服务器将事…

第三代互联网趋势分析

需求&#xff1a;近日工业和信息化部等七部门关于推动未来产业创新发展的实施意见&#xff1a;工信部联科&#xff08;2024)12号文件下发&#xff0c;物联网时代迎来了政府支持的快速发展期。 1&#xff0c;第三代互联网&#xff0c;也被称为万物互联&#xff08;IoT&#xff0…

机器学习 强化学习 深度学习的区别与联系

机器学习 强化学习 深度学习 机器学习 按道理来说&#xff0c; 这个领域&#xff08;机器学习&#xff09;应该叫做 统计学习 &#xff08;Statistical Learning&#xff09;&#xff0c;因为它的方法都是由概率统计领域拿来的。这些人中的领军人物很有商业头脑&#xff0c; 把…

亚马逊测评:卖家如何操作测评,安全高效(自养号测评)

亚马逊测评的作用在于让用户更真实、清晰、快捷地了解产品以及产品的使用方法和体验。通过买家对产品的测评&#xff0c;也可以帮助厂商和卖家优化产品缺陷&#xff0c;提高用户的使用体验。这进而帮助他们获得更好的销量&#xff0c;并更深入地了解市场需求。亚马逊测评在满足…

【获奖必看2.0】美赛小技巧之一秒输入一个公式

大家好呀&#xff0c;美赛开赛还有四天的时间&#xff0c;今天给大家带来的是美赛论文写作时非常实用的一个小技巧——快速输入任何复杂公式。 相信很多小伙伴在论文写作的时候都有一个小烦恼&#xff0c;那就是在面对比较复杂的公式的时候&#xff0c;应该怎么进行快速输入呢…

vue3项目中让echarts适应div的大小变化,跟随div的大小改变图表大小

目录如下 我的项目环境如下利用element-resize-detector插件监听元素大小变化element-resize-detector插件的用法完整代码如下&#xff1a;结果如下 在做项目的时候&#xff0c;经常会使用到echarts&#xff0c;特别是在做一些大屏项目的时候。有时候我们是需要根据div的大小改…