React JSX 如何在幕后转换为 JavaScript

react jsx 如何在幕后转换为 javascript

当你编写 react 时,你会经常看到 jsx——一种在 javascript 代码中看起来像 html 的语法。但你有没有想过这段代码在浏览器中是如何运行的?

神奇之处在于:jsx 不是有效的 javascript!浏览器无法直接理解它。在幕后,像 babel 这样的工具介入将 jsx 转换(或“转译”)为常规 javascript。

流程:

1.你编写 jsx – 它看起来像 html,但存在于你的 react 组件中。例如:

const element = 

hello, world!

;

2.babel 对其进行转换 – 在构建过程中,babel 使用 react.createelement:
将 jsx 转换为纯 javascript

const element = react.createelement('h1', null, 'hello, world!');

3.浏览器中的 javascript – 最后,这个标准 javascript 是浏览器执行的,动态构建 dom。

巴别塔是如何工作的?

babel 是一个强大的 javascript 编译器,使您能够使用最新的 javascript 功能(包括 react 中的 jsx),同时确保不同浏览器和环境之间的兼容性。以下是 babel 工作原理的详细说明:
1.解析
babel 首先将现代 javascript 或 jsx 代码解析为抽象语法树 (ast)。 ast 是一种详细的树状结构,以 babel(和其他工具)易于使用的方式表示代码来分析和操纵。在此步骤中,babel 读取了代码,但尚未更改它。
例如,babel 采用以下 jsx 代码:

const element = 

hello, world!

;

并生成一个ast,代表这段代码的结构。
2.转变
接下来,babel 将一系列插件应用到ast。每个插件负责根据它定义的规则转换ast的特定部分。这些转换可以包括现代 javascript 语法(如箭头函数或 async/await)转换为旧的、浏览器兼容的版本。
对于 jsx,babel 进行转换:

const element = 

hello, world!

;
const element = React.createElement('h1', null, 'Hello, World!');

3代码生成
完成所有转换后,babel 从转换后的 ast 生成 javascript 代码。这是生成人类可读输出的最后一步,浏览器或 node.js 可以执行该输出。

让我们得出结论…

立即学习“Java免费学习笔记(深入)”;

为什么它很重要:

jsx 允许您编写更直观、基于组件的 ui 代码,但 babel 和 javascript 运行时让它变得栩栩如生。了解这种转换可以帮助您更好地排除故障并编写更优化的 react 应用程序。

以上就是React JSX 如何在幕后转换为 JavaScript的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1491742.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 14:13:32
下一篇 2025年12月19日 14:13:46

相关推荐

  • 封装子组件后,如何从父组件中调用子组件的 ref 方法?

    子组件 ref 方法在父组件中的妙用 在 element ui 中,使用子组件的 ref 方法可以访问子组件实例。但是,当子组件被封装起来的时候,如何从父组件调用子组件的 ref 方法呢? 封装子组件 以下代码展示了封装好的子组件: export default { name: ‘eform’, p…

    2025年12月19日
    000
  • 如何实现可折叠展开的 JSON 可视化功能?

    如何实现可折叠展开的 json 可视化功能? 本文将介绍如何通过自定义 javascript 函数和 html 模板来实现类似的 json 可视化功能。 步骤 创建 html 模板: 定义一个 作为根容器,将 json 可视化显示在这个容器中。定义一个 作为模板,其中包含不同类型的 json 值的模…

    2025年12月19日
    000
  • 如何使用 Axios 实现全局拦截和请求独享响应拦截?

    axios全局拦截 vs 请求独享响应拦截 使用 axios 时,响应拦截通常是全局性的,适用于所有请求。然而,某些情况下,我们希望为特定请求单独设置响应拦截,以针对性地处理其响应。 为了解决这个问题,可以添加自定义的显示异常提示参数。以下是一份详细的步骤指南: 请求配置参数:在发送请求时,在请求配…

    2025年12月19日
    000
  • 如何在 Vue 中获取插槽内元素的 Ref?

    如何在 vue 中获取插槽内元素的 ref? 在 vue 中使用插槽创建组件时,有时需要获取插槽内元素的 ref 以进行定位或其他操作。本文将介绍几种实现此目的的方法。 外层包裹法 最直接的方法是在插槽内元素外层包裹一个 div,并为其绑定 ref。这种方法简单直接,但会引入额外的 dom 节点。 …

    2025年12月19日
    000
  • 安装 docsify-cli 脚手架时出现 ETIMEDOUT 错误怎么办?

    docsify-cli 脚手架安装报错分析与解决 在安装 docsify-cli 脚手架时,出现“etimedout”错误的情况并不少见。这通常意味着 npm 无法连接到官方注册中心。 可能原因: 网络连接问题代理设置不正确 解决方案: 更换 npm 镜像 将 npm 的注册中心切换到更稳定的国内镜…

    2025年12月19日
    000
  • 如何使用 JavaScript 和 HTML 实现 JSON 数据的可折叠展开功能?

    要实现可折叠展开的 json 可视化功能,可以借助 javascript 和 html 来完成。具体实现步骤如下: 首先,创建一个用于显示 json 数据的 html 容器: 在模板中定义各种 json 类型值的 html 结构: : , : , : , : , : , : [ … ] , : …

    2025年12月19日
    000
  • React Tooltip 中,如何使伪元素宽度自动适应文字内容,同时限制最大宽度并避免自动换行?

    伪元素宽度适应内容,受限于最大宽度且不自动换行 在React Tooltip组件中,如何让伪元素的宽度自动适应文字内容,但同时受到最大宽度的限制?进一步明确要求:在小于最大宽度时不自动换行,只有大于最大宽度时才换行。 首先,我们需要了解伪元素的初始宽度。如果初始宽度小于设置的最大宽度,则文字较少时也…

    2025年12月19日
    000
  • 为什么 `window.num` 返回 `undefined` 而 `num` 抛出 `ReferenceError`?

    js 中的 window 对象的特殊性 在 js 中,window 对象代表当前浏览器的窗口。它提供了全局作用域的访问权,允许开发者轻松访问全局变量和方法。然而,window 对象还有一个鲜为人知且令人困惑的特性:它可以访问不存在的属性。 为什么可以直接通过 window 对象访问不存在的属性? 让…

    2025年12月19日
    000
  • 大O表示法

    bu koda shuchaki 测试 uchun 尼玛迪尔….. 尼玛德尔。 奥利姆博林 console.log(‘hello world’) const articles = fetch(“”, { headers: { “api-key”: process.…

    2025年12月19日
    000
  • 使用 Redux 管理数据:在切片中存储内容和 ID

    redux 是一个流行的 javascript 应用程序状态管理库,特别是那些使用 react 等框架构建的应用程序。 redux 的核心概念之一是保存应用程序状态的集中式存储的想法。本文探讨了如何通过使用切片将内容存储与列表管理分离,从而使用 redux 有效管理数据。 了解 redux 切片 在…

    2025年12月19日
    000
  • Vue 中如何获取插槽元素的 Ref?

    vue 中获取插槽元素 ref 的解决方案 在 vue 中获取插槽内元素的 ref 是一个常见的需求,尤其是当我们需要对插槽中的元素进行定位或操作时。本文将介绍两种解决方案来获取插槽内元素的 ref。 嵌套一层 div 最简单的方法是在触发元素和内容外套一层 div,然后使用 div 的 ref。这…

    2025年12月19日
    000
  • 函数参数如何取名?一份详细规范指南是否存在?

    函数参数命名规范浅析 在编写函数时,函数参数的命名显得尤为重要,好的命名能有效提升代码的可读性和可维护性。业内是否存在一份较为详细的函数参数命名规范介绍文档? 参数命名原则 虽然业内没有一份指定的详细介绍文档,但对于函数参数命名,一般遵循以下原则: 简洁明了: 参数名应简短而有意义,避免使用晦涩或模…

    2025年12月19日
    000
  • Axios取消请求失败:为什么我的代码无法取消请求?

    针对axios取消请求失败的解决 希望取消axios请求却发现无效?这篇文章将探讨你的代码中可能存在的问题。 你提到了这段代码: const data = { …data, …json.parse(localstorage.getitem(‘_tt_token’)), canceltoken…

    2025年12月19日
    000
  • 谷歌搜索框下拉数据列表是如何获取和显示的?

    谷歌搜索框数据列表的获取与显示 尽管谷歌搜索首页中的搜索框右侧下拉的数据列表没有出现在右键检查的源码中,但通过进一步分析,我们可以了解到该数据列表的获取和显示过程。 在谷歌搜索框中输入内容时,会触发一个名为“input”的事件。事件函数向服务端发起一个请求,携带输入内容作为查询参数。服务端收到请求后…

    2025年12月19日
    000
  • 如何限制伪元素宽度并保持文本包裹?

    限制伪元素宽度同时保持文本包裹 为了让伪元素的宽度适应文本内容并受到最大宽度的限制,同时在小于最大宽度时不自动换行,而在大于最大宽度时才换行,我们需要解决以下问题: 初始宽度问题 伪元素的初始宽度受父元素影响,如果父元素宽度小于最大宽度,则伪元素会在文本量较多时提前换行。为了解决这个问题,我们需要知…

    2025年12月19日
    000
  • AJAX 请求文本报错:如何解决缓存问题和响应文本不更新的问题?

    AJAX 请求文本一直报错 使用 AJAX 从服务器请求文本时,遇到了运行报错的问题。这是因为: 缓存问题 第一次运行时,未注释掉 JSON 数据的请求代码,导致浏览器缓存了该请求。即使之后注释掉了该代码,浏览器仍会从缓存中加载已注释的代码,导致持续报错。 解决方案: 添加时间戳参数:在请求 URL…

    2025年12月19日
    000
  • ElementUI 父组件如何调用子组件 ref 方法?

    elementui 父组件调用子组件 ref 方法思路 在使用 elementui 封装组件时,父组件需要调用子组件的 ref 方法,以下提供相关的思路: 在子组件中定义 ref,即 。 在父组件中,通过 methods 定义一个函数,并在函数中调用子组件的 ref 方法。如代码所示: export…

    2025年12月19日
    000
  • 如何防止浏览器隐藏元素设置影响页面水印?

    阻止浏览器隐藏元素设置 在页面加入水印时,一个潜在的问题是浏览器提供的隐藏元素设置。为了防止用户通过该设置修改水印,可以采取以下措施: 1. 禁止右键菜单和 f12 以下代码可禁止右键查看源代码和使用 f12 键盘快捷键打开控制台: //禁止f12键盘事件document.addeventliste…

    2025年12月19日
    000
  • 如何使用 Vue3 和 Element Plus 实现复杂的表格,支持动态行列生成和二级分类数据的渲染,并实现单元格合并功能?

    使用 vue3 + element plus 完成动态行列和数据渲染,包括二级分类表格 问题描述 如何使用 vue3 + element plus 开发复杂的表格,其中横向和纵向列都动态生成,数据含有二级分类,并需要合并单元格? 解决方案 立即学习“前端免费学习笔记(深入)”; html 代码: {…

    2025年12月19日
    000
  • 了解 JavaScript 中的导出和导入

    在 javascript 中,模块是独立的代码单元,可以使用导出将资产公开给其他模块,并使用导入使用其他模块的资产。这种机制对于在现代 javascript 应用程序中构建模块化和可重用的代码至关重要。 默认导出 一个模块只能有一个默认导出。要导出默认资源,请在导出的实体之前使用 default 关…

    2025年12月19日
    000

发表回复

登录后才能评论
关注微信