在 React 中,createElement 与 cloneElement 这两个 API 分别有哪些用途?它们在参数、使用场景和返回结果上有什么不同?请结合实例说明。
考察说明
考查对 React 两个元素操作 API 的掌握,包括它们的功能定位、调用方式和适用场景的区分。
回答思路
- 【回答框架 1】createElement 是 React 创建元素的核心方法,通常由 JSX 编译后调用。它接收类型、props 和子元素,返回一个描述 UI 的 React 元素对象(即虚拟 DOM 节点)。React 内部通过它来构建元素树,这个 API 是只读的,不会修改已有元素。
- 【回答框架 2】cloneElement 用于克隆一个已有的 React 元素,并可以合并新的 props 和子元素。它接收一个元素作为第一个参数,后续参数为新的 props 和 children。返回的新元素与原始元素共享同一个类型和 key,但 props 会进行浅合并,且新 props 会覆盖旧 props。
- 【回答框架 3】核心区别在于用途:createElement 是从零创建元素,而 cloneElement 是基于已有元素进行复制和扩展。cloneElement 常用于在组件内部向子组件传递额外的 props,或在不重新创建元素的前提下调整其属性。
- 【回答框架 4】典型场景:高阶组件或父组件需要给子组件注入 props 时,常使用 cloneElement;而 createElement 则多用于手动创建元素,比如在非 JSX 环境或实现某些特定逻辑时。
- 【关键点 1】createElement 创建新元素,cloneElement 克隆已有元素并合并新 props。
- 【关键点 2】cloneElement 返回的新元素与原始元素共享 type 和 key,props 浅合并。
- 【关键点 3】cloneElement 常用于向子组件注入额外 props,而 createElement 用于创建新的元素。
- 【易错点 1】cloneElement 对 props 是浅合并,深层嵌套的 props 不会被递归合并,需要自行处理。
- 【易错点 2】不要混淆两者:createElement 不接收已有元素作为参数,而 cloneElement 必须以元素为第一参数。