跳到主要内容

API✅

说一下 React 中有哪些内置 API?

答案

框架无关的 API 在 react 包中,包含

API说明
hooks API提供一系列可以注入函数组件的 API,如 useStateuseEffect
act用于 react 组件测试
cache用于缓存计算结果
captureOwnerStack用于捕获组件的所有者堆栈信息, 只在调试模式可用
createContext用于创建上下文对象, 通过 ProviderConsumer 组件来共享数据,函数组件通过 useContext 消费。注意在 React 19 后可以直接使用返回的值作为 Provider, 详见 Provider
lazy用于实现组件的懒加载
memo用于优化函数组件的性能,避免不必要的重新渲染, 组件属性会进行浅比较,相等则跳过渲染
startTransition用于在 React 中标记状态更新为非紧急,从而允许更高优先级的更新先执行,实现渲染调度
use用来从 Promise 或 Component 中获取值, 配合服务端 API 和 Suspense 使用
experimental_taintObjectReference用于标记对象引用为不安全,实验性质只能在 react@experimental 中使用
experimental_taintUniqueValue用于标记唯一值为不安全,react@experimental 中使用
unstable_addTransitionType用于在过渡中添加新的类型, react@experimental 中使用

ReactDOM 包中 API 如下

API说明
hooks API目前只有 useFormStatus 用于表单处理
createRoot用于创建 React 根节点, 通过 createRoot 创建的根节点可以使用新的并发特性
hydrateRoot用于在服务端渲染的基础上重新激活 React 组件
createPortal用于创建 React Portal, 可以将子组件渲染到 DOM 的其他位置
flushSync用于强制同步更新 React 组件的状态
preconnect预连接到外部资源, 提高性能
prefetchDNS预获取 DNS 信息, 提高性能
preinit预初始化资源
preinitModule预初始化 ESM 资源
preload预加载资源
preloadModule预加载 ESM 模块
服务端API用于 SSR
prerender将 React Tree 渲染为 HTML 字符串,使用 Web Stream
prerenderToNodeStream将 React Tree 渲染为 HTML 字符串,使用 Node Stream

此外 ReactDOM 还包括一些历史遗留的 API, 罗列如下

API说明
Children用来更安全的遍历 props.children 属性,包括 mapforEachcount 等方法
cloneElement用于复制一个已有的 React 元素,并返回一个新的 React 元素,同时可以修改它的一些属性
Component用于创建类组件, 通过继承 React.Component 类来创建一个新的组件类
createElement用于创建 React 元素, 通过传入类型、属性和子元素来创建一个新的 React 元素
createRef用于创建一个 ref 对象, 可以在类组件中使用,函数组件可以直接使用 useRef
forwardRef用于在函数组件中获取子组件的 ref, 解决函数组件无法直接使用 ref 的问题,在 React19 中已经不需要此包裹了
isValidElement用于判断一个对象是否是一个有效的 React 元素
PureComponent用于创建一个纯组件, 通过继承 React.PureComponent 类来创建一个新的组件类,自动进行浅比较

面试官视角

这只是个热身问题,面试官会通过面试者回答问题的方式来判断面试者对 React API 的了解程度。比如 面试者会如何分类这些 API, 分类方式体现了面试者的理解程度。此外通过面试者自行说明常用的 API 可以进一步下探追问细节。作为面试者没必要全部记住这些 API,重点是熟悉常用 API ,有自己的归纳和总结即可。

createElement 和 cloneElement 的区别?

答案
维度createElementcloneElement
主要用途创建 React 元素克隆并修改 React 元素
参数type, props, childrenelement, props, children
返回值新 React 元素新 React 元素
典型场景组件渲染、JSX 编译复用/增强已有元素

补充说明

  • createElement 是 React 创建虚拟 DOM 的底层方法,JSX 会被编译为 createElement 调用。它用于生成新的 React 元素,通常不直接手写。
  • cloneElement 用于基于已有的 React 元素进行克隆,并可追加/覆盖 props 或 children,常用于高阶组件、插槽、动态增强子组件等场景。
  • 两者都返回新的 React 元素,原元素不会被修改。
// createElement 示例
const el = React.createElement('button', { type: 'button' }, 'Click')

// cloneElement 示例
const newEl = React.cloneElement(el, { disabled: true }, 'New Text')

延伸阅读