版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
React高频面试题及详细答案(真实职场版)一、React基础概念题1.说说你对React的理解,它的核心特点是什么?React是一款用于构建用户界面的前端JavaScript库,核心聚焦视图层开发,主打组件化开发模式,适配单页应用和大型前端项目。核心特点主要有五点:组件化:页面拆分为独立、可复用的组件,每个组件维护自身逻辑和样式,大幅提升代码复用性和可维护性。单向数据流:数据从父组件流向子组件,子组件不能直接修改父级数据,所有数据变更可追溯,规避复杂数据混乱问题。虚拟DOM:不直接操作真实DOM,通过虚拟DOM对比新旧节点差异,最小化更新真实DOM,提升页面渲染性能。声明式编程:只需描述页面最终状态,无需手动操作DOM增删改,代码更简洁、可读性更高。函数式编程思想:推崇纯函数、不可变数据,配合Hooks让组件逻辑更简洁、副作用可控。2.虚拟DOM是什么?工作原理是怎样的?虚拟DOM是对真实DOM的一层JS对象描述,本质是一个树形JS对象,用来存储页面节点的结构、属性和内容信息。工作原理分为三步:生成虚拟DOM:组件初始化或数据更新时,React会根据组件状态生成新的虚拟DOM树。Diff对比:将新虚拟DOM和旧虚拟DOM进行逐层对比,找出节点差异(新增、删除、修改)。批量更新:只将差异部分更新到真实DOM,而非全量渲染,最大程度减少DOM操作开销。简单来说,就是先对比、后更新,解决了频繁操作真实DOM性能低下的问题。3.React中key的作用是什么?为什么不建议用index做key?key是React列表元素的唯一标识,作用是在Diff算法过程中,帮助React精准识别节点,区分哪些节点需要更新、删除、新增,提升Diff对比效率,避免节点错位复用。不建议用index索引做key,核心原因是列表结构变化时会引发渲染bug和性能问题:当列表进行头部插入、删除、排序操作时,后续所有元素的index都会发生变化。React会误判所有节点都发生了变更,导致不必要的重新渲染,降低页面性能。会引发组件状态错乱,比如输入框内容、选中状态错位、残留等问题。最佳实践:使用后端返回的唯一稳定ID作为key。4.说说React单向数据流,和双向绑定的区别?React严格遵循单向数据流:数据自上而下流动,父组件通过props传值给子组件,子组件无法直接修改props,只能通过触发父组件传递的事件函数,通知父组件更新数据,数据更新后重新向下传递。双向绑定常见于Vue,数据和视图相互绑定,视图修改会直接更新数据,数据修改也会更新视图。两者对比:单向数据流:数据变更可追溯,逻辑清晰,适合大型项目,维护成本低,缺点是表单场景需要手动处理事件。双向绑定:开发表单更便捷,但数据变更隐蔽,复杂项目中容易出现数据混乱,难以定位问题。补充:React可以通过受控组件模拟双向绑定,但底层依旧是单向数据流。二、React组件与生命周期1.函数组件和类组件的区别?目前企业开发主流是函数组件+Hooks,类组件基本只用于维护老项目,两者核心区别如下:语法简洁度:函数组件是纯JS函数,代码简洁、体积小;类组件需要继承Component,写法繁琐、模板代码多。状态管理:函数组件借助useState、useReducer管理状态;类组件通过this.state、this.setState管理状态。生命周期:函数组件无原生生命周期,通过useEffect模拟所有生命周期场景;类组件拥有完整独立的生命周期钩子。this指向:函数组件无this指向问题;类组件存在this丢失问题,需要手动绑定或箭头函数修正。复用逻辑:函数组件通过Hooks复用逻辑,灵活简洁;类组件依赖HOC、renderProps,嵌套层级深、代码冗余。2.类组件的生命周期有哪些?分别在什么场景使用?类组件生命周期分为三大阶段:挂载、更新、卸载1.挂载阶段(组件首次渲染)constructor:初始化state、绑定事件this指向,不适合做异步请求。render:渲染页面视图,纯函数,禁止修改state、执行异步操作。componentDidMount:组件挂载到DOM后执行,适合发起接口请求、初始化定时器、绑定DOM事件。2.更新阶段(state/props变化触发)render:重新渲染视图。componentDidUpdate:组件更新完成后执行,可监听数据变化、更新DOM、发起后续请求。3.卸载阶段componentWillUnmount:组件卸载前执行,核心用于清除定时器、取消接口请求、解绑DOM事件,防止内存泄漏。3.受控组件和非受控组件的区别?受控组件:表单值由Reactstate统一管理,value绑定state,通过onChange事件更新state。所有表单状态受框架控制,数据可追溯,适合需要实时校验、联动、受控管理的表单场景,是项目主流用法。非受控组件:表单值由原生DOM管理,通过ref获取DOM节点取值,state不实时绑定表单值。写法简单、代码少,但状态不受控,无法实时校验,仅适合简单一次性表单。三、Hooks核心面试题(重点)1.为什么会出现Hooks?解决了什么问题?Hooks是React16.8推出的特性,主要解决类组件的几大痛点:类组件逻辑复用困难,HOC、renderProps会产生组件嵌套地狱,代码可读性差。类组件生命周期逻辑碎片化,同一个业务逻辑分散在多个钩子中,维护困难。类组件this指向问题频繁出错,代码冗余繁琐。函数组件原本无状态、无生命周期,无法开发复杂业务组件,Hooks补齐了函数组件的能力。简单说:Hooks让函数组件拥有状态、生命周期、逻辑复用能力,简化代码、提升可维护性。2.useState、useEffect核心用法与注意事项useState用于为函数组件添加响应式状态,调用后返回状态值和修改状态的函数。注意点:状态更新是异步批量更新,连续多次setState会合并执行,不会多次渲染。更新引用类型数据(对象、数组),必须返回新地址,直接修改原数据不会触发渲染更新。初始值如果是复杂计算,可传入函数,仅首次渲染执行,避免重复计算。useEffect副作用钩子,用于模拟生命周期,处理异步请求、定时器、DOM操作、事件监听等副作用。依赖项规则:无依赖:组件每次渲染都会执行。空数组依赖[]:仅挂载时执行一次,模拟componentDidMount。指定依赖[a,b]:依赖项变化时才会重新执行。核心注意:必须清理副作用,返回的清理函数会在组件更新、卸载时执行,防止内存泄漏。3.Hooks的使用规则有哪些?这是面试高频基础考点,严格遵循两条核心规则:只在函数组件顶层调用Hooks:不能在循环、条件判断、嵌套函数中使用,保证每次渲染Hooks执行顺序一致,React才能精准匹配状态。只在函数组件和自定义Hooks中调用:类组件、普通JS函数中无法使用Hooks。4.useRef的作用?和createRef有什么区别?useRef主要两个用途:获取DOM节点、存储不变的可变数据(跨渲染周期保存值)。和createRef区别:useRef:函数组件专用,组件每一次渲染都会复用同一个ref对象,值更新不会触发组件重渲染。createRef:类组件专用,每次组件渲染都会生成一个全新的ref对象,频繁渲染会导致ref重置。5.useMemo和useCallback的作用与区别?两者都是React缓存优化Hooks,用于减少不必要的计算和渲染,提升性能。useMemo缓存计算结果,依赖不变时,复用上次计算的值,避免重复执行复杂计算逻辑。执行时机是渲染阶段,不能处理副作用。useCallback缓存函数本身,依赖不变时,函数地址不变,避免子组件接收新props触发无效重渲染,常配合React.memo使用。核心区别useMemo缓存值,用于优化计算性能;useCallback缓存函数,用于优化组件渲染性能。useMemo返回计算结果,useCallback返回函数本身。补充:不要滥用这两个钩子,简单逻辑无需缓存,会增加内存开销。四、React原理与Diff算法1.React的Diff算法原理,为什么Diff效率高?传统DOM对比需要递归遍历整棵树,时间复杂度O(n³),性能极差。ReactDiff做了三大策略优化,将复杂度降到O(n):层级比较:只对比同层级节点,不跨层级对比,页面DOM结构很少出现跨层级移动,大幅减少对比范围。同层节点key唯一标识:通过key精准匹配新旧节点,快速判断新增、删除、移动。节点类型判断:不同类型节点直接销毁重建,相同类型节点只更新属性和内容。2.ReactsetState是同步还是异步?大部分场景异步批量更新,特殊场景同步更新。异步场景(主流)在React合成事件、生命周期钩子中,setState是异步批量更新。多次连续setState会被合并,只执行一次渲染,目的是提升性能,避免频繁重渲染。此时打印state无法获取最新值。同步场景在原生DOM事件、setTimeout、Promise异步回调中,setState是同步执行,可立即获取最新state值。获取最新state的方法使用setState函数式更新:setState(prev=>newState)在useEffect中监听state变化获取最新值3.什么是合成事件?和原生事件的区别?React合成事件是React封装的跨浏览器兼容事件系统,并非原生DOM事件。React会将所有事件委托到根节点,统一事件处理、兼容各浏览器,优化性能。区别:合成事件:事件委托、批量处理、浏览器兼容、异步更新state,事件对象是合成对象。原生事件:绑定在对应DOM节点、无兼容处理、实时触发、state同步更新。五、性能优化实战1.日常开发中,React性能优化的手段有哪些?整理项目中常用、面试常答的全套优化方案:组件渲染优化:使用React.memo缓存函数组件,避免props不变时重渲染;类组件使用PureComponent、shouldComponentUpdate。函数缓存优化:用useCallback缓存事件函数,配合React.memo避免子组件无效更新。计算缓存优化:复杂计算逻辑用useMemo缓存结果,避免每次渲染重复计算。列表渲染优化:不用index做key,使用唯一ID;长列表使用虚拟列表,只渲染可视区域DOM。副作用优化:严格清理useEffect副作用,清除定时器、取消请求,避免内存泄漏。状态优化:拆分细粒度state,避免全局大状态更新导致大面积重渲染;避免在渲染中创建新对象、新数组。路由懒加载:使用React.lazy+Suspense实现路由组件按需加载,减少首屏打包体积。打包优化:去除冗余依赖、开启压缩、分包打包,优化页面加载速度。2.React.memo、useMemo、useCallback三者的区别?三者各司其职,优化维度完全不同:React.memo:组件级别优化,高阶组件,缓存整个组件,props不变则不重渲染。useMemo:数据级别优化,缓存计算结果,避免重复计算。useCallback:函数级别优化,缓存函数引用,保证props函数地址稳定,配合memo生效。六、React路由与状态管理1.React路由的两种模式区别?ReactRouter主流两种模式:hash模式、history模式hash模式:地址带#号,基于浏览器hashchange事件,无需后端配置,兼容性好,刷新页面不会404,但地址不美观。history模式:地址干净无#,基于H5historyAPI,体验更好,但需要后端配置路由重定向,否则刷新页面会出现404。2.说说你对Redux的理解,核心流程是什么?Redux是React全局状态管理工具,用于管理跨组件、全局共享状态,适合中大型项目,保证状态统一、可预测。核心三大原则:单一数据源、状态只读、纯函数修改状态。完整工作流程:组件触发dispatch派发action。action携带type和数据,传递给reducer。reducer根据actiontype,通过纯函数计算返回新state。store更新全局state,组件监听state变化更新视图。3.Redux中间件的作用?常用中间件有哪些?Redu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026及未来5年中国OPP薄膜市场现状数据分析及前景预测报告
- 电击伤的急救与护理
- 2026年电大检察实务模拟试题(含答案)
- 2026年临澧辅警考试模拟题及答案详解
- 餐厨垃圾处理项目可行性研究报告
- 2026事业单位工勤技能-江西-江西军工电子设备制造工二级(技师)历年参考题库含答案详解
- 2026事业单位工勤技能-新疆-新疆水土保持工二级(技师)历年参考题库含答案详解
- 2026事业单位工勤技能-广东-广东工程测量工五级(初级工)历年参考题库含答案详解
- 2026事业单位工勤技能-山西-山西园林绿化工四级(中级工)历年参考题库含答案详解
- 2026融媒体宣传岗2026事业单位面试经典例题题库
- 烟草专卖局(公司)招聘考试试题题库(含答案)
- 6.4民生福祉持续增进 议题式教学课件(共24张)+内嵌视频 2026-2027学年统编版道德与法治9年级上册
- 2026年多旋翼无人机超视距驾驶员执照考试题库(新版)
- 旧房翻新施工方案模板(3篇)
- 2026安徽日报报业集团招聘工作人员专业测试及有关工作笔试历年常考点试题专练附带答案详解
- 2026年生物实验室风险评估与风险控制
- 2026年宁波市海曙区社区工作者招聘考试真题(附答案)
- 心内科冠脉介入治疗进展汇报
- 多胎妊娠孕妇的营养需求与补充策略
- 2025党课结业考试题及答案
- 牧羊少年奇幻之旅
评论
0/150
提交评论