React | React.cloneElement 的使用

我看到同事的代码里有 cloneElement,于是去了解了一下这个函数。

就跟它的名字一样,克隆元素,可以基于一个元素创建一个新的元素,并且为新元素添加新的属性或者覆盖已有的属性。

下面是一个简单例子:

css 复制代码
.node1 {
  background-color: orange;
  width: fit-content;
}

.node2 {
  background-color: red;
  width: fit-content;
}
typescript 复制代码
import React from 'react';
import styles from './index.less';

const CloneElement = () => {
  const node1 = <div className={styles.node1}>node</div>;
  // 修改className,添加onClick
  const node2 = React.cloneElement(node1, {
    className: styles.node2,
    onClick: () => {
      console.log('点击node2');
    },
  });

  return (
    <div>
      {node1}
      {node2}
    </div>
  );
};

export default CloneElement;

效果:

node2 克隆自 node1,并且 node2 覆盖了 node1className 属性,还添加了一个 onClick 方法。

不得不说还是挺好用的,但是官方认为使用 cloneElement 是不常见的做法,并且可能导致代码变得脆弱,建议我们使用传值的方式:

cloneElement 官方文档

总结就是,我们要知道这个函数的作用是什么,但使用的时候要慎重。

相关推荐
RichardLau_Cx6 小时前
【保姆级实操】MediaPipe SDK/API 前端项目接入指南(Web版,可直接复制代码)
前端·vue·react·webassembly·mediapipe·手部追踪·前端计算机视觉
We་ct7 小时前
LeetCode 289. 生命游戏:题解+优化,从基础到原地最优
前端·算法·leetcode·矩阵·typescript
We་ct9 小时前
LeetCode 383. 赎金信:解题思路+代码解析+优化实战
前端·算法·leetcode·typescript
D11_10 小时前
[特殊字符]️ 5379工具箱 - 全部网站链接汇总
服务器·百度·阿里云·typescript·编辑器
敲敲了个代码10 小时前
从N倍人力到1次修改:Vite Plugin Modular 如何拯救多产品前端维护困境
前端·javascript·面试·职场和发展·typescript·vite
小小工匠11 小时前
大模型开发 - 零手写 AI Agent:深入理解 ReAct 模式与 Java 实现
人工智能·react
雪域迷影1 天前
MacOS中运行Next.js项目注册新用户时MongoDB报错MongoServerError
mongodb·macos·react·next.js
Highcharts.js1 天前
使用Highcharts与React集成 官网文档使用说明
前端·react.js·前端框架·react·highcharts·官方文档
VT.馒头1 天前
【力扣】2625. 扁平化嵌套数组
前端·javascript·算法·leetcode·职场和发展·typescript
San30.1 天前
从零构建坚固的前端堡垒:TypeScript 与 React 实战深度指南
前端·react.js·typescript