React面试合集

1. React 核心概念

1.1 什么是 React?它的核心优势是什么?

答案:

React 是一个用于构建用户界面的 JavaScript 库。

核心优势:
  • 组件化:将 UI 拆分为可复用的组件。
  • 虚拟 DOM:通过高效的 Diff 算法减少直接操作 DOM 的开销。
  • 单向数据流:数据流动清晰,易于调试和维护。
  • 生态丰富:拥有庞大的社区和生态系统。

1.2 函数组件和类组件的区别是什么?

答案:

函数组件:
  • 使用 JavaScript 函数定义。
  • 通过 Hooks 管理状态和生命周期。
  • 代码更简洁,性能更好。
类组件:
  • 使用 ES6 类定义。
  • 通过 this.state 和生命周期方法管理状态和行为。
  • 适用于复杂逻辑和旧代码库。

1.3 什么是 Hooks?常用的 Hooks 有哪些?

答案:

Hooks 是 React 16.8 引入的特性,允许在函数组件中使用状态和生命周期。
常用 Hooks:
  • useState:管理组件状态。
  • useEffect:处理副作用(如数据获取、订阅)。
  • useContext:访问 React Context。
  • useReducer:复杂状态管理。
  • useMemo 和 useCallback:优化性能。
  • React 高级特性

2.1 什么是 React 的并发模式(Concurrent Mode)?

答案:

并发模式是 React 的一种新渲染模式,允许应用在渲染过程中中断和恢复。
核心特性:
  • 时间切片:将渲染任务拆分为小块,避免阻塞主线程。
  • 优先级调度:根据用户交互优先级调整渲染顺序。
  • 相关 API:useTransition、useDeferredValue。

2.2 如何使用 Suspense 实现懒加载?

答案:

Suspense 允许组件在等待异步数据时显示加载状态。
示例:
const LazyComponent = React.lazy(() => import('./LazyComponent'));

function App() {
  return (
    <React.Suspense fallback={<div>Loading...</div>}>
      <LazyComponent />
    </React.Suspense>
  );
}

2.3 什么是 React Server Components?

答案:

Server Components 是 React 的一种新特性,允许在服务器端渲染组件。
优势:
  • 减少客户端 JavaScript 体积。
  • 支持直接访问服务器端数据源。
  • 使用场景:静态内容、数据获取密集型组件。
  • React 生态系统

3.1 如何在 React 中实现路由?

答案:

使用 React Router:
import { BrowserRouter, Route, Routes } from 'react-router-dom';

function App() {
  return (
    <BrowserRouter>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/about" element={<About />} />
      </Routes>
    </BrowserRouter>
  );
}

3.2 Redux 的工作原理是什么?

答案:

Redux 是一个状态管理库,基于 Flux 架构。
核心概念:
  • Store:存储全局状态。
  • Action:描述状态变化。
  • Reducer:根据 Action 更新状态。
  • 工作流程:View -> Action -> Reducer -> Store -> View。

3.3 如何使用 React Query 进行数据获取?

答案:

React Query 是一个用于数据获取和状态管理的库。
示例:
import { useQuery } from 'react-query';

function fetchData() {
  return fetch('/api/data').then((res) => res.json());
}

function App() {
  const { data, isLoading, error } = useQuery('data', fetchData);

  if (isLoading) return <div>Loading...</div>;
  if (error) return <div>Error: {error.message}</div>;

  return <div>{JSON.stringify(data)}</div>;
}

4. React 性能优化

4.1 如何避免不必要的渲染?

答案:

  • 使用 React.memo 包裹函数组件,避免在 props 未变化时重新渲染。
  • 使用 useMemo 和 useCallback 缓存值和函数。
示例:
const MemoizedComponent = React.memo(function MyComponent(props) {
  return <div>{props.value}</div>;
});

4.2 什么是代码分割(Code Splitting)?如何实现?

答案:

代码分割是将代码拆分为多个小块,按需加载。
实现方式:
  • 使用 React.lazy 和 Suspense:

    const LazyComponent = React.lazy(() => import('./LazyComponent'));

  • 使用 Webpack 的动态 import()。

5. React 与新兴技术

5.1 如何使用 React 开发 Web3 应用?

答案:

使用 ethers.js 或 web3.js 与区块链交互。

示例:

import { ethers } from 'ethers';

async function connectWallet() {
  const provider = new ethers.providers.Web3Provider(window.ethereum);
  await provider.send("eth_requestAccounts", []);
  const signer = provider.getSigner();
  const address = await signer.getAddress();
  console.log("Connected wallet:", address);
}

5.2 React 如何与 AI 集成?

答案:

使用 TensorFlow.js 在 React 中运行机器学习模型。

示例:

import * as tf from '@tensorflow/tfjs';

function predict(input) {
  const model = await tf.loadLayersModel('model-url');
  const prediction = model.predict(tf.tensor(input));
  return prediction.dataSync();
}

6. React 面试常见问题

6.1 如何实现组件的条件渲染?

答案:

使用 if 语句、三元运算符或逻辑与运算符:
function App({ isLoggedIn }) {
  return (
    <div>
      {isLoggedIn ? <WelcomeMessage /> : <LoginButton />}
    </div>
  );
}

6.2 如何捕获组件中的错误?

答案:

使用错误边界(Error Boundaries):
class ErrorBoundary extends React.Component {
  state = { hasError: false };

  static getDerivedStateFromError(error) {
    return { hasError: true };
  }

  render() {
    if (this.state.hasError) {
      return <div>Something went wrong.</div>;
    }
    return this.props.children;
  }
}

总结

2025 年 React 面试问题将围绕核心概念、高级特性、生态系统、性能优化和新兴技术展开。通过掌握这些知识点,并结合实际项目经验,你可以更好地应对未来的 React 面试挑战。

相关推荐
阿芯爱编程9 分钟前
typescript语法讲解
前端·javascript
Daniel_18722 分钟前
Promise-课堂笔记
前端·javascript·笔记
一点一木40 分钟前
TensorFlow.js 和 Brain.js 全面对比:哪款 JavaScript AI 库更适合你?
前端·javascript·人工智能
疯狂的沙粒1 小时前
如何更轻松的对React refs 的理解?都有哪些应用场景?
前端·react.js·前端框架
w2sfot2 小时前
Building Real-Time APIs with Node.js and React.js Using Socket.io
前端·react.js·node.js
借来一夜星光2 小时前
【前端动效】HTML + CSS 实现打字机效果
前端·css3·html5
C182981825753 小时前
Gateway怎么实现限流的
前端·bootstrap·gateway
研究司马懿3 小时前
【DevOps】Jenkins使用Pipline发布Web项目
前端·jenkins·devops
借来一夜星光3 小时前
【前端动效】原生js实现拖拽排课效果
前端·javascript·css3·html5