讲师中心 微信公众号
AI工具推荐 视频效率加速

使用CDN引入React时解决JSX渲染问题的教程

阿宇酱_9433

阿宇酱_9433

发布时间:2025-11-05 18:10:14

|

529人浏览过

|

来源于php中文网

原创

使用CDN引入React时解决JSX渲染问题的教程

本教程旨在解决使用cdn方式引入react和babel时,jsx代码无法正确渲染的问题。核心在于理解浏览器不原生支持jsx,需要babel进行转换。文章详细阐述了通过为包含jsx的`<script>`标签添加`type="text/jsx"`属性来指示babel进行即时编译的解决方案,并提供了完整的示例代码和使用注意事项,帮助初学者顺利启动react开发。</script>

理解React CDN引入与JSX编译

对于初学者而言,通过CDN(内容分发网络)直接在HTML文件中引入React库是一种快速体验React开发的方式。这种方法避免了复杂的构建工具配置,让开发者能够专注于React组件的编写。然而,当涉及到JSX(JavaScript XML)语法时,一个常见的问题是浏览器无法直接识别和执行它,导致组件无法正确渲染。

JSX是React的核心特性之一,它允许我们在JavaScript代码中编写类似HTML的结构,极大地提高了组件的可读性和开发效率。但由于它不是标准的JavaScript语法,需要在浏览器执行前被转换成普通的JavaScript(即React.createElement()调用)。这个转换过程通常由Babel这样的JavaScript编译器完成。

在使用CDN方式时,我们通常会引入以下三个关键库:

  1. React: React核心库,定义了组件、生命周期等。
  2. ReactDOM: React DOM库,负责将React组件渲染到DOM中。
  3. Babel Standalone: 一个独立运行的Babel版本,可以直接在浏览器中编译JavaScript代码,包括JSX。

核心问题:Babel如何识别并编译JSX?

当我们在HTML中引入了Babel Standalone之后,它并不会自动编译所有<script>标签内的代码。Babel需要一个明确的指示来知道哪些脚本包含了需要转换的JSX或ESNext语法。如果缺少这个指示,Babel就不会介入处理,浏览器会尝试将JSX作为普通JavaScript解析,从而导致语法错误或静默失败(即没有错误信息,但组件不显示)。</script>

解决方案:指定脚本类型为text/jsx

根据Babel的官方文档,当@babel/standalone在浏览器中加载时,它会自动编译并执行所有带有type="text/babel"或type="text/jsx"属性的<script>标签。这就是解决JSX不渲染问题的关键。通过为包含React组件和ReactDOM.render调用的<script>标签添加type="text/jsx"属性,我们明确告知Babel该脚本需要进行JSX转换。</script>

htmlppt.skill
htmlppt.skill

把任意文章或文档内容转换成精美的全屏翻页 HTML 演示文件(幻灯片风格)。当用户发来一篇文章、文档链接、Markdown 内容、或粘贴的文本,并且希望生成演示用的 HTML 时触发。支持任意内容来源:iWiki 链接、KM 链接、本地文件路径、直接粘贴的文本。生成的 HTML 文件保存到本地工作区,并通过企微直接发送给用户。触发词示例:帮我把这篇文章做成PPT、转成演示文档、生成HTML幻灯片、做个演示、转成可以演示的格式、article to deck、make a slide。

下载

示例代码与实现步骤

以下是修正后的完整HTML代码,演示了如何正确地使用CDN引入React、ReactDOM和Babel Standalone,并确保JSX代码被正确编译和渲染:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>React CDN JSX渲染示例</title>

    <!-- 1. 引入React核心库 -->
    <script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
    <!-- 2. 引入ReactDOM库 -->
    <script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
    <!-- 3. 引入Babel Standalone,用于在浏览器中编译JSX -->
    <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>

    <!-- 4. 包含React组件和渲染逻辑的脚本,并指定type="text/jsx" -->
    <script type="text/jsx">
      // 定义一个简单的React类组件
      class StoryBox extends React.Component {
        render() {
          return <div>Hello from Story Box!</div>;
        }
      }

      // 将组件渲染到ID为'root'的DOM元素中
      // 注意:React 18推荐使用createRoot,但为了兼容旧版和本教程场景,此处仍使用ReactDOM.render
      ReactDOM.render(<StoryBox />, document.getElementById("root"));
    </script>
</head>
<body>
    <!-- 5. 页面中用于挂载React组件的DOM元素 -->
    <div id="root"></div>
</body>
</html>

在上述代码中,关键的改动在于:

<script type="text/jsx">
  // ... 你的React组件代码 ...
</script>

通过添加type="text/jsx",Babel Standalone在页面加载时会识别这个脚本,将其中的JSX转换为浏览器可理解的JavaScript,然后执行,最终将"Hello from Story Box!"显示在id="root"的div中。

注意事项与最佳实践

  1. 加载顺序: 确保babel.min.js在包含JSX代码的<script type="text/jsx">标签之前加载。否则,Babel将无法在JSX代码执行前对其进行编译。</script>
  2. type="text/babel"与type="text/jsx": 两种类型都可以使用。text/jsx更具体地表明了脚本内容是JSX,而text/babel则表示脚本需要Babel处理,可能包含JSX或其他ESNext特性。在仅涉及JSX的场景下,两者效果相同。
  3. 开发环境使用: 这种通过CDN和Babel Standalone在浏览器中即时编译JSX的方式,主要适用于学习、原型开发或简单的演示项目。
  4. 生产环境不推荐: 在生产环境中,不建议使用Babel Standalone进行即时编译。因为浏览器端编译会增加页面加载时间,影响用户体验。生产环境通常会使用构建工具(如Webpack、Vite、Rollup等)在开发阶段将JSX预编译为纯JavaScript,并进行代码优化和打包,以提高性能。
  5. React 18 createRoot: 尽管本教程为了演示兼容性仍使用了ReactDOM.render,但React 18及更高版本推荐使用ReactDOM.createRoot来创建根节点并渲染应用,以获得更好的性能和新的并发特性。例如:
    // const root = ReactDOM.createRoot(document.getElementById('root'));
    // root.render(<StoryBox />);

    在学习阶段,了解并掌握ReactDOM.render是基础,但也要留意现代React的推荐用法。

总结

通过CDN引入React进行开发是入门React的便捷途径。当遇到JSX代码不渲染的问题时,核心在于理解Babel Standalone需要明确的指示来编译JSX。为包含JSX代码的<script>标签添加type="text/jsx"属性,是解决这一问题的直接有效方法。虽然这种方式适用于开发和学习,但在生产环境中,应转向使用现代构建工具进行预编译,以优化应用性能和用户体验。</script>

热门AI工具

更多
Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

相关专题

更多
pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

4924

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

6397

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

2582

2024.11.28

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

4756

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1415

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1858

2023.08.03

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

10303

2023.08.17

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

1020

2023.09.01

Docker Desktop怎么设置端口映射
Docker Desktop怎么设置端口映射

本专题聚焦Docker Desktop容器端口映射与访问配置,整理从创建容器、设置端口绑定到验证本地服务访问的操作流程。针对端口被占用、映射配置错误、容器服务无法访问等情况,也提供相应的检查方向,方便用户完成端口配置。

0

2026.11.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 12.4万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn