添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

createElement 允许你创建一个 React 元素。它可以作为 JSX 的替代方案。

const element = createElement(type, props, ...children)

createElement(type, props, ...children)

调用 createElement 来创建一个 React 元素,它有 type props children 三个参数。

import { createElement } from 'react';

function Greeting({ name }) {
return createElement(
'h1',
{ className: 'greeting' },
'你好'
);
}

查看更多例子

type type 参数必须是一个有效的 React 组件类型,例如一个字符串标签名(如 'div' 'span' ),或一个 React 组件(一个函数式组件、一个类式组件,或者是一个特殊的组件如 Fragment )。

props props 参数必须是一个对象或 null 。如果你传入 null ,它会被当作一个空对象。创建的 React 元素的 props 与这个参数相同。注意, props 对象中的 ref key 比较特殊,它们 不会 作为 element.props.ref element.props.key 出现在创建的元素 element 上,而是作为 element.ref element.key 出现。

可选 ...children :零个或多个子节点。它们可以是任何 React 节点,包括 React 元素、字符串、数字、 portal 、空节点( null undefined true false ),以及 React 节点数组。

createElement 返回一个 React 元素,它有这些属性:

  • type :你传入的 type
  • props :你传入的 props ,不包括 ref key
  • ref :你传入的 ref 。如果缺失则为 null
  • key :你传入的 key ,会被强制转换为字符串。如果缺失则为 null
  • 通常你会在你组件的最后返回这个元素,或者把它作为另一个元素的子元素。虽然你可以读取元素的属性,但你最好把创建的元素作为黑盒,只用于渲染。

    你必须 把 React 元素和它们的 props 视为 不可变的 ,在创建后永远不要改变它们的内容。在开发环境中,React 会浅层 冻结 返回的元素及其 props 属性,以确保如此。

    当你使用 JSX 时, 你必须以大写字母开头来渲染你的自定义组件 。换句话说, <Something /> 等价于 createElement(Something) ,但 <something /> (小写)等价于 createElement('something') (注意它是一个字符串,它会被当作内置的 HTML 标签)。

    你应该仅 在所有子元素都是静态可知的情况下,才将它们依次传递给 createElement 的可选参数 ,比如 createElement('h1', {}, child1, child2, child3) 。如果你的子元素不固定,则把它们放到数组中作为第三个参数传递,例如 createElement('ul', {}, listItems) ,以此确保 React 可以在动态列表的场景下 警告你缺少 key 。静态列表的场景不需要这么做,因为它们不会重新排序。

    不使用 JSX 创建元素

    如果你不喜欢 JSX 或者无法在你的项目中使用它,你可以使用 createElement 作为替代方案。

    要想不使用 JSX 创建一个元素,你可以调用 createElement 并传入 type props children

    import { createElement } from 'react';

    function Greeting({ name }) {
    return createElement(
    'h1',
    { className: 'greeting' },
    '你好',
    createElement('i', null, name),
    '。欢迎!'
    );
    }

    children 是可选的,你可以传入任意数量的子元素(上面的例子中有三个)。这段代码会显示一个带有问候语的 <h1> 标题。为了对比,这是使用 JSX 的版本:

    function Greeting({ name }) {
    return (
    <h1 className="greeting">
    你好<i>{name}</i>,欢迎!
    </h1>
    );
    }

    要想渲染你自己的 React 组件,则传入一个函数(比如 Greeting )作为 type ,而不是一个字符串(比如 'h1' ):

    export default function App() {
    return createElement(Greeting, { name: '泰勒' });
    }

    如果使用 JSX,它看起来像这样:

    export default function App() {
    return <Greeting name="泰勒" />;
    }

    这里是一个完整的使用 createElement 的示例:

    import { createElement } from 'react';
    function Greeting({ name }) {
      return createElement(
        'h1',
        { className: 'greeting' },
        '你好',
        createElement('i', null, name),
        ',欢迎!'
    export default function App() {
      return createElement(
        Greeting,
        { name: '泰勒' }
    

    这里是相同的示例,但使用的是 JSX:

    function Greeting({ name }) {
      return (
        <h1 className="greeting">
          你好<i>{name}</i>,欢迎!
    export default function App() {