You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ReactJS中如何通过指定ref引用克隆对应元素

问题解答

该需求可以实现,你当前写法的核心问题是入参不符合React.cloneElement的要求。

错误原因

  • React.cloneElement的第一个参数必须是React元素对象,而你传入的elementRef是useRef返回的引用容器,其current属性在组件挂载后存储的是真实DOM节点,并非React元素,因此无法直接用于克隆。

推荐实现方案

最稳妥的实现方式是提前将需要克隆的目标元素定义为React元素变量,再基于该变量执行克隆操作,同时也可以正常给原始元素绑定ref,完整实现代码如下:

import "./styles.css";
import React, { useRef } from "react"

export default function App() {
  const elementRef = useRef();
  // 提前定义需要克隆的目标元素
  const targetElement = (
    <div 
      className="div-style"
      ref={elementRef}
    >
      div original
    </div>
  );
  // 克隆React元素,第二个参数可传入新的props覆盖原有属性
  const clonedElement = React.cloneElement(targetElement, {
    className: "div-style cloned" // 示例:给克隆元素新增类名做区分
  });

  return (
    <div className="App">
      <h1>Test React.cloneElement()</h1>
      <h2>我想要复制以下这个div:</h2>
      {/* 渲染原始元素 */}
      {targetElement}

      <span> 复制结果: </span>
      {/* 渲染克隆后的元素 */}
      {clonedElement}
    </div>
  );
}

补充说明

  • 上述方案克隆得到的是独立的React元素,和原始元素互不干扰,各自绑定的ref也会指向对应的真实DOM节点。
  • 如果你需要克隆已经挂载的真实DOM的运行时状态(比如用户输入的表单值、动态修改的DOM属性),可以使用原生DOM API elementRef.current.cloneNode(true) 实现深克隆,注意该方式克隆的DOM不会保留React侧绑定的事件监听,需要自行重新绑定。

内容的提问来源于stack exchange,提问作者JGPcode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 15:18:04