React中createElement 和 cloneElement 的区别

Posted suwu150

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了React中createElement 和 cloneElement 的区别相关的知识,希望对你有一定的参考价值。

React中createElement 和 cloneElement 的区别

createElement 和 cloneElement都能够生成可以直接在jsx页面组件中使用的标签语言,但是在生成的过程中是存在细微差别的

一、createElement

createElement()官网说明

1.语法格式
React.createElement(
  type,
  [props],
  [...children]
)
2.说明

React.createElement():JSX 语法就是用 React.createElement()来构建 React 元素的。它接受三个参数,第一个参数type可以是一个标签名。如 div、span,或者 React 组件。第二个参数props为传入的属性。第三个以及之后的参数children,皆作为组件的子组件。
如下我们使用createElement进行创建标签

我们能够通过浏览器检查看到我们设置在标签上的属性

二、cloneElement()

cloneElement()官网说明

1.语法
React.cloneElement(
  element,
  [props],
  [...children]
)
2.说明

React.cloneElement()与 React.createElement()相似,不同的是它传入的第一个参数element是一个 React 元素,而不是标签名或组件。新添加的属性会并入原有的属性,传入到返回的新元素中,而旧的子元素将被替换。将保留原始元素的键和引用。

如下,使用cloneElement进行创建jsx元素,在这里我们将createElement创建的element对应的 React 元素做为基点,然后进行克隆,在克隆的过程中,进行添加id='2'属性,同时将子标签进行修改

我们能够看到将我们设置的属性添加到了标签上面,并且替换掉了子标签的内容

三、实际使用
有了以上知识的认识,我们可以在以后的组件封装中进行更加React化的设计,通过封装公共组件供其他页面迭代使用,进行我们业务功能更加接近的封装。

以上是关于React中createElement 和 cloneElement 的区别的主要内容,如果未能解决你的问题,请参考以下文章

Jest、Enzyme 和 Styled Component 不适用于警告:React.createElement

如何在 React 中渲染由 createElement() 创建的元素?

为啥 React.createElement() 会创建一个对象?

为啥 React 组件是通过 `React.createElement()` 方法执行的?

React Storybook SVG 无法在“文档”上执行“createElement”

如何使用 React.createElement 添加悬停 CSS 样式