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

React JS初学者指南:解决HTML中脚本加载与JSX转换常见问题

胖宇大大_2424

胖宇大大_2424

发布时间:2025-12-02 12:32:38

|

278人浏览过

|

来源于php中文网

原创

react js初学者指南:解决html中脚本加载与jsx转换常见问题

本教程旨在解决React JS初学者在HTML中加载JavaScript文件时遇到的常见问题,特别是涉及JSX转换和React版本兼容性。文章将详细阐述`script`标签中`type="text/babel"`属性的重要性、React 17和React 18中渲染API的区别,以及在本地开发环境中可能遇到的CORS策略限制及其解决方案,帮助开发者正确配置环境,顺利进行React实践。

在学习React JS的初期,开发者常常选择通过CDN引入React库和Babel进行快速原型开发。然而,在将包含JSX语法的JavaScript文件链接到HTML时,可能会遇到页面空白、控制台报错等问题。这通常源于对Babel转换机制的误解、React API版本差异以及本地文件服务环境的限制。

1. 理解JSX转换与脚本类型

React应用的核心之一是JSX,它允许我们在JavaScript中编写类似HTML的结构。然而,浏览器本身并不直接识别JSX语法,需要一个转换器(如Babel)将其编译成标准的JavaScript。当我们在HTML中直接引入包含JSX的.js文件时,如果希望Babel在浏览器端进行实时转换,就必须明确告知浏览器该脚本需要特殊处理。

核心问题点: 浏览器默认将<script src="script.js"></script>视为纯JavaScript代码。如果script.js中包含JSX,浏览器会因为无法解析而报错或导致脚本无法执行。

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

解决方案: 引入babel-standalone库后,需要通过在script标签中添加type="text/babel"属性来指示浏览器,该脚本内容应由babel-standalone进行预处理。

示例代码:

<!DOCTYPE html>
<html>
    <head>
        <title>React JSX 示例</title>
        <link rel="stylesheet" href="index.css">
        <!-- 引入 React 库 -->
        <script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
        <script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
        <!-- 引入 Babel-standalone 用于浏览器端JSX转换 -->
        <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
    </head>
    <body>
        <div id="root"></div>
        <!-- 引入你的 React 组件脚本,并指定 type="text/babel" -->
        <script src="script.js" type="text/babel"></script>
    </body>
</html>

在script.js文件中,你可以像往常一样编写包含JSX的React代码:

// script.js
ReactDOM.render(<p>Hello, React 17!</p>, document.getElementById("root")); // 适用于 React 17

2. 适配React版本API

React在不同版本中,其API可能发生变化,尤其是在主要版本更新时。一个常见的例子是React 17到React 18的渲染方式改变。

  • React 17及以前版本: 使用ReactDOM.render()方法将React元素渲染到DOM节点。

    Vite
    Vite

    为开发、生产构建和库打包配置并优化 Vite。

    下载
    // 适用于 React 17
    ReactDOM.render(
      <p>Hello, React 17!</p>,
      document.getElementById("root")
    );
  • React 18及以后版本: 引入了并发模式(Concurrent Mode),并推荐使用ReactDOM.createRoot()创建一个根节点,然后调用其render()方法。ReactDOM.render()在React 18中已被标记为遗留API,会触发控制台警告。

    // 适用于 React 18
    const root = ReactDOM.createRoot(document.getElementById("root"));
    root.render(
      <p>Hello, React 18!</p>
    );

注意事项: 确保你引入的React库版本与你JS文件中使用的渲染API相匹配。如果你引入的是React 18的CDN,但仍使用ReactDOM.render(),页面虽然可能显示,但控制台会输出警告信息。

3. 本地文件加载与CORS策略

当你在浏览器中直接打开一个本地HTML文件(例如file:///D:/Ventures/React%20tutorial/index.html),并尝试通过babel-standalone加载本地的script.js文件时,你可能会遇到“CORS policy: Cross origin requests are only supported for protocol schemes: http, isolated-app, brave, https...”这样的错误。

原因分析: babel-standalone在浏览器中转换JSX时,它需要通过XMLHttpRequest(XHR)或fetch API来读取type="text/babel"的脚本内容。出于安全考虑,浏览器对file://协议下的XHR请求有严格的CORS(跨域资源共享)限制,通常不允许从本地文件系统加载其他本地文件。

解决方案: 为了在本地进行开发,你需要通过一个本地HTTP服务器来提供文件服务,而不是直接在浏览器中打开HTML文件。这样,浏览器会通过http://或https://协议访问你的文件,从而避免CORS限制。

推荐工具:

  • VS Code Live Server 扩展: 这是最便捷的解决方案之一。安装后,右键点击HTML文件选择“Open with Live Server”,它会自动启动一个本地服务器(如http://127.0.0.1:5500/index.html)来服务你的文件。
  • Node.js http-server: 如果你安装了Node.js,可以通过npm install -g http-server全局安装,然后在项目根目录运行http-server命令。
  • Python SimpleHTTPServer: 在项目根目录运行python -m http.server (Python 3) 或 python -m SimpleHTTPServer (Python 2)。

使用本地服务器后,babel-standalone就能正常通过HTTP请求加载并转换你的script.js文件,页面也就能正常显示了。

总结与最佳实践

要确保你的React JS脚本在HTML中正确加载并显示内容,请遵循以下关键点:

  1. 为JSX脚本添加type="text/babel": 这是让babel-standalone在浏览器中转换JSX的必要条件。
  2. 匹配React版本与渲染API: 根据你引入的React库版本(React 17或React 18),使用对应的渲染方法(ReactDOM.render()或ReactDOM.createRoot().render())。
  3. 使用本地HTTP服务器进行开发: 避免直接打开file://协议的HTML文件,以解决CORS策略问题,确保babel-standalone能正常加载本地脚本。
  4. 检查浏览器控制台: 始终关注浏览器的开发者工具控制台,任何错误或警告信息都可能指出问题的根源。
  5. 生产环境考虑: 在实际项目开发中,通常不建议在浏览器端进行JSX转换,因为这会增加客户端的负担并影响性能。更常见的做法是使用构建工具(如Webpack、Vite、Parcel)在开发阶段将JSX预编译为纯JavaScript,然后部署编译后的文件。

通过理解和应用这些原则,你可以有效解决React JS初学者在设置开发环境时遇到的脚本加载和渲染问题,为后续的React学习打下坚实的基础。

相关文章

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
UpDream
UpDream Hot

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

WorkBuddy

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

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

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

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

豆包大模型

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

DeepSeek

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

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

相关专题

更多
js正则表达式
js正则表达式

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

3816

2023.06.20

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

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

1215

2023.07.28

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

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

1558

2023.08.03

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

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

9283

2023.08.17

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

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

840

2023.09.01

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2244

2023.09.04

Js中concat和push的区别
Js中concat和push的区别

Js中concat和push的区别:1、concat用于将两个或多个数组合并成一个新数组,并返回这个新数组,而push用于向数组的末尾添加一个或多个元素,并返回修改后的数组的新长度;2、concat不会修改原始数组,是创建新的数组,而push会修改原数组,将新元素添加到原数组的末尾等等。本专题为大家提供concat和push相关的文章、下载、课程内容,供大家免费下载体验。

1429

2023.09.14

js截取字符串的方法介绍
js截取字符串的方法介绍

JavaScript字符串截取方法,包括substring、slice、substr、charAt和split方法。这些方法可以根据具体需求,灵活地截取字符串的不同部分。在实际开发中,根据具体情况选择合适的方法进行字符串截取,能够提高代码的效率和可读性 。

3809

2023.09.21

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

60

2026.09.23

热门下载

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

精品课程

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

共14课时 | 1.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 5.6万人学习

CSS教程
CSS教程

共754课时 | 94万人学习

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

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