React 各模块相关全面面试及答案解析

一、核心概念

1、什么是React?它的核心特性是什么?

答案:React是用于构建UI的JavaScript库。核心特性包括组件化、虚拟DOM、单向数据流和声明式编程。

2、解释虚拟DOM的工作原理。

答案:虚拟DOM是内存中的轻量DOM表示,React通过Diff算法比较新旧虚拟DOM差异,最小化真实DOM操作。

3、JSX是什么?为什么使用它?

答案:JSX是语法扩展,允许在JS中写类似HTML的结构。Babel将其转为React.createElement()调用。

4、React组件间如何通信?

答案:父子组件通过Props传递数据,子到父通过回调函数;跨层级用Context、Redux或事件总线。

5、React中key的作用是什么?

答案:key帮助React识别元素唯一性,优化列表渲染性能,避免元素位置变化导致的错误。

二、组件与生命周期

1、类组件与函数组件的区别?

答案:类组件使用class和生命周期方法;函数组件用Hooks管理状态和副作用。

2、列出React类组件的生命周期方法。

答案:

挂载:constructor, render, componentDidMount

更新:shouldComponentUpdate, render, componentDidUpdate

卸载:componentWillUnmount

3、componentDidMount和useEffect(() => {}, [])的区别?

答案:两者功能相似,但useEffect在布局和绘制后异步执行,componentDidMount同步执行。

4、什么是错误边界(Error Boundary)?如何实现?

答案:捕获子组件错误的类组件,需定义static getDerivedStateFromError()和componentDidCatch()。

5、React中的合成事件(Synthetic Event)是什么?

答案:React封装浏览器原生事件,提供跨浏览器一致性和自动事件委托。

三、Hooks

1、useState的作用是什么?示例代码。

javascript 复制代码
const [count, setCount] = useState(0);
useEffect如何模拟componentDidMount和componentWillUnmount?
javascript 复制代码
useEffect(() => {
  // componentDidMount
  return () => { /* componentWillUnmount */ };
}, []);

2、useMemo和useCallback的区别?

答案:useMemo缓存计算结果,useCallback缓存函数引用。

3、自定义Hook的命名规则是什么?示例。

答案:以use开头,如useFetch,内部可调用其他Hooks。

4、为什么Hooks不能放在条件或循环中?

答案:Hooks依赖调用顺序,条件/循环会破坏顺序,导致状态错乱。

四、状态管理

1、React中的状态提升(Lifting State Up)是什么?

答案:将共享状态提升到最近的共同父组件,通过Props传递数据。

2、Redux的核心概念是什么?

答案:Store(单一状态源)、Action(事件描述)、Reducer(纯函数更新状态)。

3、Redux中间件(如Redux Thunk)的作用?

答案:处理异步操作,允许Action返回函数而非普通对象。

4、Context API的使用场景?

答案:跨层级组件共享数据(如主题、用户信息),避免Props逐层传递。

5、MobX和Redux的区别?

答案:MobX使用响应式编程,自动追踪状态变化;Redux基于不可变数据和纯函数。

五、路由

1、React Router的和区别?

答案:BrowserRouter使用HTML5 History API(需要服务器支持),HashRouter用URL hash。

2、如何实现路由守卫(如登录验证)?

javascript 复制代码
const PrivateRoute = ({ children }) => {
  const isAuthenticated = checkAuth();
  return isAuthenticated ? children : <Navigate to="/login" />;
};

3、动态路由参数如何获取?

答案:使用useParams()(React Router v6)。

4、和标签的区别?

答案:阻止页面刷新,通过React Router导航;触发页面刷新。

六、性能优化

1、如何避免不必要的组件渲染?

答案:使用React.memo、shouldComponentUpdate、useMemo/useCallback。

2、代码分割(Code Splitting)的实现方式?

答案:React.lazy() + Suspense,或Webpack的import()动态导入。

3、React中的"协调(Reconciliation)"是什么?

答案:React通过Diff算法比较新旧虚拟DOM,决定如何高效更新真实DOM。

4、什么是"纯组件(PureComponent)"?

答案:类组件自动实现shouldComponentUpdate,浅比较Props和State。

七、高级主题

1、React Fiber架构的目标是什么?

答案:实现增量渲染,允许中断和恢复渲染过程,提升复杂应用的性能。

2、React中的Portals是什么?使用场景?

答案:ReactDOM.createPortal(child, container),用于将子节点渲染到DOM外的位置(如模态框)。

3、React服务端渲染(SSR)的原理和优势?

答案:服务器生成HTML发送到客户端,加速首屏加载,利于SEO。

4、如何实现React组件的国际化(i18n)?

答案:使用库如react-i18next,配合JSON语言文件动态切换内容。

八、常见问题与陷阱

1、为什么直接修改State是错误的?

答案:React依赖不可变数据触发更新,直接修改不会触发重新渲染。

2、setState是同步还是异步的?

答案:在React合成事件和生命周期中是异步的,在setTimeout或原生事件中是同步的。

3、如何解决this指向问题?

答案:类组件中通过构造函数绑定this,或使用箭头函数。

九、React 18新特性

1、自动批处理(Automatic Batching)是什么?

答案:React 18默认将多个状态更新合并为单次渲染,减少重复渲染。

2、useTransition的作用是什么?

答案:标记非紧急更新,允许用户在高优先级任务(如输入)期间保持界面响应。

3、并发模式(Concurrent Mode)的核心优势?

答案:可中断渲染,优先处理用户交互,提升复杂应用体验。

十、测试与工具

1、如何测试React组件?

答案:使用Jest + React Testing Library,模拟用户行为而非实现细节。

2、React DevTools的主要功能?

答案:检查组件树、状态、Props,分析性能,调试Hooks。

相关推荐
i建模2 小时前
Electron、Tauri及其它跨平台方案终极对比
前端·javascript·electron·跨平台开发
betterangela2 小时前
react工程化开发
前端·javascript·vue.js·react.js·前端框架
计算机科研狗@OUC2 小时前
Firefox缩小标签页高度以及自定义调整
前端·firefox
lmy_loveF2 小时前
安装 cnpm 出现 Unsupported URL Type “npm:“: npm:string-width@^4.2.0
前端·npm·node.js
伟笑3 小时前
elementUI 表格隔行换色,修改table表头背景样式
前端·javascript·elementui
m0_748234523 小时前
SpringMVC 请求参数接收
前端·javascript·算法
@PHARAOH3 小时前
HOW - 在Windows浏览器中模拟MacOS的滚动条
前端·macos
叫我OldFe3 小时前
vue videojs使用canvas截取视频画面
前端·vue.js·音视频·js
七爷不在我这里3 小时前
charles 抓取https<仅web端>
前端·网络协议·https·charles
CsharpDev-奶豆哥3 小时前
ASP.NET实现上传图片生成缩略图的功能
服务器·前端·asp.net