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使用,识别意外的副作用(如重复调用渲染函数),帮助提升代码质量。

相关推荐
一拳不是超人20 分钟前
DeepSeek Harness 为什么敢说"一切皆插件"?拆透 Cordis 引擎的五大核心机制
前端·人工智能·agent
IT_陈寒32 分钟前
Python的GIL让我多写了500行代码
前端·人工智能·后端
风骏时光牛马32 分钟前
AI智能体能力调度微服务
前端
Eloudy2 小时前
ReAct 原理简介
前端·javascript·人工智能·react.js·agent·gpu
ZJU_统一阿萨姆3 小时前
【DSH】如何将 DeepSeek Harness 嵌入生产环境?万字解构 DeepSeek Agent Harness 的运行机制与安全边界
前端·javascript·安全
用户921080262863 小时前
4. 前端地图大量点位实时更新优化:后端推增量,前端做 diff
前端
嘟嘟07174 小时前
Next.js 博客左侧笔记列表是怎么从 Redis 渲染出来的?从组件、children 到动态路由一次讲清
redis·react.js·前端工程化
SoaringHeart4 小时前
Flutter最佳实践:Web项目中文字体首次加载乱码问题解决
前端·flutter
西安小哥4 小时前
破局与重生:大厂前端如何借力 AI 转型“超级全栈“
前端·人工智能
sunly_5 小时前
TypeScript总结:16、面向对象速查
前端·javascript·typescript