前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手写jsx

手写jsx

作者头像
程序员王天
发布2023-10-18 19:17:35
1420
发布2023-10-18 19:17:35
举报

JSX 本质上是 React.createElement 的语法糖,返回 VDOM。在运行的时候,需要通过 babel 编译

在 react17 之前,jsx 转换都会转换为 React.createElement 调用, 所以我们必须在第一行加上:

代码语言:javascript
复制
js
复制代码import React from "react"

本质上,react 中的 jsx 会转化为 createElement 或者 jsx 函数调用。 看几个栗子 1. 单一元素 jsx:

代码语言:javascript
复制
html
复制代码<div data-id='test-id'>
  hello world
</div>

结果: 2. 嵌套标签 jsx: 结果:

代码语言:javascript
复制
React.createElement(
  "div",
  {
    "data-id": "test-id",
  },
  "hello world",
  React.createElement(
    "span",
    {
      className: "span",
    },
    "hello span"
  )
);

React17 之后的版本 React 已经不需要引入 createElement ,这种模式来源于 Automatic Runtime,看一下是如何编译的。

代码语言:javascript
复制
function App() {
  return (
    <div>
      <h1>hello,world</h1>
    </div>
  );
}

编译后

代码语言:javascript
复制
import { jsx as _jsx } from "react/jsx-runtime";
import { jsxs as _jsxs } from "react/jsx-runtime";
function App() {
  return _jsxs("div", {
    children: [
      _jsx("h1", {
        children: "hello,world",
      }),
    ],
  });
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023年9月30日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档