当前位置: 首页 > article >正文

React 常见面试题及答案

记录面试过程 常见问题,如有错误,欢迎批评指正

1. 什么是虚拟DOM?为什么它提高了性能?

虚拟DOM是React创建的一个轻量级JavaScript对象,表示真实DOM的结构。当状态变化时,React会生成新的虚拟DOM,并通过Diff算法比较新旧差异,仅更新变化的部分到真实DOM。这减少了直接操作DOM的次数,避免了昂贵的重绘和重排,从而提升性能。

2. React类组件和函数组件的区别?Hooks的作用是什么?

类组件:使用ES6类定义,有生命周期方法和状态(this.state)。

函数组件:无状态,但通过Hooks(如useState, useEffect)可管理状态和副作用。

Hooks作用:允许函数组件使用状态、生命周期等特性,简化代码并促进逻辑复用。

3. 解释useEffect的依赖数组的作用。

空数组[]:仅在组件挂载和卸载时执行(类似componentDidMount和componentWillUnmount)。

无数组:每次渲染后都执行。

包含变量的数组[a, b]:当a或b变化时执行。

4. 受控组件与非受控组件的区别?

受控组件:表单数据由React组件管理(通过value和onChange)。

非受控组件:表单数据由DOM自身管理,通过ref获取值(如<input ref={inputRef} />)。

5. 为什么列表渲染时需要key?

key帮助React识别元素变化,优化Diff算法效率。若缺少key,可能导致性能下降或渲染错误(如状态错乱)。

6. React Router如何实现动态路由和路由守卫?

动态路由:使用参数占位符(如<Route path="/user/:id" />),通过useParams()获取参数。

路由守卫:封装<Route>组件,结合useNavigate和条件渲染(如检查用户权限后重定向)。

7. React性能优化方法有哪些?

常用方法:

a、使用React.memo缓存组件。

b、useMemo和useCallback避免重复计算和函数重建。

c、代码分割(React.lazy + Suspense)实现懒加载。

d、避免在渲染函数中进行高开销操作。

8. Redux的核心概念是什么?与Context API的区别?

Redux核心:单一状态树,通过action触发reducer更新状态,使用中间件处理异步。

与Context区别Redux适合大型应用全局状态管理,提供调试工具和中间件;Context适合局部跨层级数据传递,无需额外库。

9. React合成事件是什么?

React将浏览器原生事件封装为合成事件,提供跨浏览器一致性,并自动管理事件绑定(事件委托到根节点)。

10. 错误边界(Error Boundaries)如何实现?

通过类组件的static getDerivedStateFromError()componentDidCatch()捕获子组件树中的错误,显示降级UI(函数组件暂不支持)。

11. React 18有哪些新特性?

主要特性:

a、并发模式(Concurrent Mode):可中断渲染,优化用户体验。

b、自动批处理:合并多个状态更新,减少渲染次数。

c、新Hooks:如useId生成唯一ID,useTransition管理非紧急更新。

12. Hooks使用规则有哪些?

规则:

只在函数组件或自定义Hooks顶层调用。

不能在循环、条件或嵌套函数中使用。

13. JSX是什么?如何转换为JavaScript?

JSX是语法糖,会被Babel转换为React.createElement()调用,生成React元素对象(如React.createElement('div', null, 'Hello'))。

14. 高阶组件(HOC)与Render Props的区别?

HOC:通过函数包装组件,返回增强功能的新组件(如withRouter(Component))。

Render Props:通过组件传递函数prop动态渲染内容(如<DataProvider render={data => <Child data={data} />} />)。

15. React严格模式的作用?

检测不安全的生命周期方法、过时的API使用,识别意外的副作用(如重复调用渲染函数),帮助提升代码质量。

相关文章:

React 常见面试题及答案

记录面试过程 常见问题&#xff0c;如有错误&#xff0c;欢迎批评指正 1. 什么是虚拟DOM&#xff1f;为什么它提高了性能&#xff1f; 虚拟DOM是React创建的一个轻量级JavaScript对象&#xff0c;表示真实DOM的结构。当状态变化时&#xff0c;React会生成新的虚拟DOM&#xf…...

SpringSecurity 实现token 认证

配置类 Configuration EnableWebSecurity EnableGlobalMethodSecurity(prePostEnabledtrue) public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { Bean Override public AuthenticationManager authenticationManagerBean() throws Exception {return s…...

【详解 | 辨析】“单跳多跳,单天线多天线,单信道多信道” 之间的对比

文章目录 1. 单跳 & 多跳2. 单天线 & 多天线3. 单信道 & 多信道4. 小区内通信 & 小区间通信5. 更多辨析5.1 无线Mesh网络&#xff0c;Ad Hoc网络&#xff0c;无线传感器网络&#xff08;MSN&#xff09;5.2 “单天线/多天线”与“单信道/多信道”的区别 6. 工业…...

嵌入式开发工程师笔试面试指南-HR面试常见问题汇总

在嵌入式领域的招聘面试中,HR 通过一系列精心设计的问题,全面考察候选人的综合素质、专业能力以及与岗位的匹配度。以下从多个关键方面汇总了 HR 在嵌入式面试中常见的问题。 ** 一、语言表达方面 请简单介绍一下你自己这是面试开场常见问题,旨在让候选人做一个自我展示,…...

Docker 搭建 Gitlab 服务器 (完整详细版)

参考 Docker 搭建 Gitlab 服务器 (完整详细版)_docker gitlab-CSDN博客 Docker 安装 (完整详细版)_docker安装-CSDN博客 Docker 日常命令大全(完整详细版)_docker命令-CSDN博客 1、Gitlab镜像 # 查找Gitlab镜像 docker search gitlab # 拉取Gitlab镜像 docker pull gitlab/g…...

MongoDB安全管理

MongoDB如何鉴权 保证数据的安全性是数据库的重大职责之一。与大多数数据库一样&#xff0c;MongoDB内部提供了一套完整的权限防护机制。如下例所示&#xff1a; mongo --host 127.0.0.1 --port 27017 --username someone --password errorpass --authenticationDatabasestor…...

架构案例:从初创互联网公司到分布式存储与反应式编程框架的架构设计

文章目录 引言一、初创互联网公司架构演化案例1. 万级日订单级别架构2. 十万级日订单级别架构3. 百万级日订单级别架构 二、分布式存储系统 Doris 架构案例三、反应式编程框架架构案例总结 引言 分布式架构 今天我们将探讨三种不同类型的架构案例&#xff0c;分别探讨 一个初…...

神经网络之CNN图像识别(torch api 调用)

1.简介 CNN 是受生物学上感受野机制启发而提出的。它通过卷积操作自动提取数据中的特征&#xff0c;避免了传统机器学习方法中复杂的特征工程过程&#xff0c;能够自动学习到数据中的有效特征&#xff0c;从而进行分类、识别等任务。 2.结构 2.1卷积&#xff1a; 假设你有一…...

使用Truffle、Ganache、MetaMask、Vue+Web3完成的一个简单区块链项目

文章目录 概要初始化Truffle项目创建编写合约编译合约配置Ganache修改truffle-config.js文件编写迁移文件部署合约使用Truffle 控制台使用MetaMask和VueWeb3与链交互 概要 使用Truffle、Ganache、MetaMask、VueWeb3完成的一个简单区块链项目。 初始化Truffle项目 安装好truf…...

学生管理前端

文章目录 首页student.html查询功能 首页 SpringBoot前端html页面放在static文件夹下&#xff1a;/src/main/resources/static 默认首页为index.html&#xff0c;我们可以用两个超链接或者两个button跳转到对应的页面。这里只是单纯的跳转页面&#xff0c;不需要提交表单等其…...

DeepSeek 助力 Vue3 开发:打造丝滑的网格布局(Grid Layout)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…...

lvgl运行机制分析

lv_timer_handler() 是 LVGL 的“心脏”&#xff1a;这个函数会依次做以下事情&#xff1a; 处理定时器&#xff08;如动画、延迟回调&#xff09;。 读取输入设备&#xff08;如触摸屏、按键的状态&#xff09;。 刷新脏区域&#xff08;仅重绘屏幕上发生变化的区域&#xf…...

ffmpeg avformat_open_input的作用

1. avformat_open_input 的作用 avformat_open_input 是 FFmpeg 中用于打开输入文件或输入设备的函数。它的主要作用是初始化输入文件或设备的上下文&#xff08;AVFormatContext&#xff09;&#xff0c;并准备好从输入源读取数据。 2. avformat_open_input 的功能 打开输入文…...

leaflet扩展插件esri-leaflet.js

esri-leaflet.js是一个开源的JavaScript库&#xff0c;它允许开发者在Leaflet地图上轻松地使用Esri的服务&#xff0c;如ArcGIS Online和ArcGIS Server的图层。以下是对esri-leaflet.js插件的详细介绍&#xff1a; 一、主要功能 esri-leaflet.js的主要功能是将Esri的地图服务…...

8 SpringBoot进阶(上):AOP(面向切面编程技术)、AOP案例之统一操作日志

文章目录 前言1. AOP基础1.1 AOP概述: 什么是AOP?1.2 AOP快速入门1.3 Spring AOP核心中的相关术语(面试)2. AOP进阶2.1 通知类型2.1.1 @Around:环绕通知,此注解标注的通知方法在目标方法前、后都被执行(通知的代码在业务方法之前和之后都有)2.1.2 @Before:前置通知,此…...

day01_Java基础

文章目录 day01_Java基础一、今日课程内容二、Java语言概述&#xff08;了解&#xff09;1、Java语言概述2、为什么要学习Java语言3、Java平台版本说明4、Java特点 三、Java环境搭建&#xff08;操作&#xff09;1、JDK和JRE的概述2、JDK的下载和安装3、IDEA的安装4、IDEA的启动…...

cursor 弹出在签出前,请清理仓库工作树 窗口

问题出现的背景&#xff1a;是因为我有两台电脑开发&#xff0c;提交后&#xff0c;另一个电脑的代码是旧的&#xff0c;这个时候我想拉取最新的代码&#xff0c;就会出现如下弹窗&#xff0c;因为这个代码暂存区有记录或者工作区有代码的修改&#xff0c;所以有冲突&#xff0…...

详解直方图均衡化

直方图均衡化&#xff08;Histogram Equalization&#xff09; 是图像处理中一种常用的对比度增强技术&#xff0c;通过调整图像的灰度分布&#xff0c;使得图像的直方图尽可能均匀分布&#xff0c;从而提高图像的对比度和细节表现。以下是直方图均衡化的原理详解&#xff1a; …...

MyBatis-Plus 自动填充功能

MyBatis-Plus&#xff08;MP&#xff09; 提供了一个非常强大的功能——自动填充功能。该功能可以在执行插入或更新操作时&#xff0c;自动为某些字段赋值&#xff0c;免去手动设置这些字段的麻烦。常见的应用场景包括 创建时间 和 更新时间 字段的自动填充&#xff0c;帮助开发…...

认知动力学视角下的生命优化系统:多模态机器学习框架的哲学重构

认知动力学视角下的生命优化系统&#xff1a;多模态机器学习框架的哲学重构 一、信息熵与生命系统的耗散结构 在热力学第二定律框架下&#xff0c;生命系统可视为负熵流的耗散结构&#xff1a; d S d i S d e S dS d_iS d_eS dSdi​Sde​S 其中 d i S d_iS di​S为内部熵…...

Kibana:Spotify Wrapped 第二部分:深入挖掘数据

作者&#xff1a;来自 Elastic Philipp Kahr 我们将比以往更深入地探究你的 Spotify 数据并探索你甚至不知道存在的联系。 在由 Iulia Feroli 撰写的本系列的第一部分中&#xff0c;我们讨论了如何获取 Spotify Wrapped 数据并在 Kibana 中对其进行可视化。在第 2 部分中&#…...

C++—类与对象(中)

目录 1、类的6个默认成员函数 2、构造函数 构造函数的特性 3、初始化列表 4、析构函数 概念 5、拷贝构造函数 6、运算符重载 7、赋值运算符重载 赋值运算符重载格式 8、前置和后置重载 9、const修饰的成员 10、取地址及const取地址重载 1、类的6个默认成员函数 一…...

MySQL 事务笔记

MySQL 事务笔记 目录 事务简介事务操作事务四大特性并发事务问题事务隔离级别总结 事务简介 事务&#xff08;Transaction&#xff09;是数据库操作的逻辑单元&#xff0c;由一组不可分割的SQL操作组成。主要用于保证&#xff1a; 多个操作的原子性&#xff08;要么全部成功…...

红黑树和 STL —— set和map 【复习笔记】

1. 二叉搜索树 1.1 二叉搜索树的概念 相比较前文的堆&#xff0c;二叉搜索树并不需要必须是一棵完全二叉树 二叉搜索树&#xff08;二叉排序树或二叉查找树&#xff0c;简称BST&#xff09;是具有以下特性的二叉树&#xff1a; 1. 若它的左子树非空&#xff0c;则左子树上所…...

网络空间安全(7)攻防环境搭建

一、搭建前的准备 硬件资源&#xff1a;至少需要两台计算机&#xff0c;一台作为攻击机&#xff0c;用于执行攻击操作&#xff1b;另一台作为靶机&#xff0c;作为被攻击的目标。 软件资源&#xff1a; 操作系统&#xff1a;如Windows、Linux等&#xff0c;用于安装在攻击机和…...

HarmonyOS学习第11天:布局秘籍RelativeLayout进阶之路

布局基础&#xff1a;RelativeLayout 初印象 在 HarmonyOS 的界面开发中&#xff0c;布局是构建用户界面的关键环节&#xff0c;它决定了各个组件在屏幕上的位置和排列方式。而 RelativeLayout&#xff08;相对布局&#xff09;则是其中一种功能强大且灵活的布局方式&#xff0…...

【2025年2月28日稳定版】小米路由器4C刷机Immortalwrt 23.05.4系统搭载mentohust 0.3.1插件全记录

小米路由器4C刷机Immortalwrt系统搭载mentohust插件全记录 首先将路由器按住后面的reset&#xff0c;用一个针插进去然后等待5s左右&#xff0c;松开&#xff0c;即可重置路由器。 然后要用物理网线物理连接路由器Lan口和电脑&#xff0c;并将路由器WAN口连接至网口。确保电脑…...

【SpringBoot+Vue】博客项目开发二:用户登录注册模块

后端用户模块开发 制定参数交互约束 当前&#xff0c;我们使用MybatisX工具快速生成的代码中&#xff0c;包含了一个实体类&#xff0c;这个类中包含我们数据表中的所有字段。 但因为有些字段&#xff0c;是不应该返回到前端的&#xff0c;比如用户密码&#xff0c;或者前端传…...

idea + Docker + 阿里镜像服务打包部署

一、下载docker desktop软件 官网下载docker desktop&#xff0c;需要结合wsl使用 启动成功的画面(如果不是这个画面例如一直处理start或者是stop需要重新启动&#xff0c;不行就重启电脑) 打包成功的镜像在这里&#xff0c;如果频繁打包会导致磁盘空间被占满&#xff0c;需…...

从入门到精通:Linux 权限管理(rwx/chmod/chown)

目录 1. 引言&#xff1a;为什么需要文件权限&#xff1f; 2. 基础概念&#xff1a;理解 rwx 权限 &#xff08;1&#xff09;权限的三种角色 &#xff08;2&#xff09;权限的三种类型 &#xff08;3&#xff09;权限的两种表示法 &#xff08;4&#xff09; 目录的 rwx…...