当前位置: 首页 > 面试题库 >

为什么ReactJS中需要browser.min.js?

杨宏儒
2023-03-14
问题内容

我正在尝试构建一个简单的React应用程序,并且想知道为什么我需要browser.min.js文件。

我已经包含了react和react-dom.js,但是除非未包含browser.min.js,否则什么也不会显示。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Hello React!</title>
    <script src="react/react.js"></script>
    <script src="react/react-dom.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.23/browser.min.js"></script> 
  </head>
  <body>
    <div id="example"></div>
    <script type="text/babel">
      ReactDOM.render(
        <h1>Hello, world!</h1>,
        document.getElementById('example')
      );
    </script>
  </body>
</html>

问题答案:

正如您在代码段中看到的那样,script标记的类型为“ text /
babel”,这是因为您正在其中使用JSX(带有XML的Javascript)进行编码。

JSX正在编写编码糖,以使其更“直观”地以javascript代码(不过不仅是React元素)构建XML(在这种情况下为HTML)组件。React将其用作用于创建/定义UI元素的合成方法上的抽象层。
但是
JSX不是全球公认的标准,因此并非所有浏览器都支持。这就是您需要第三方“编译器”库将JSX转换为原始JS的原因,而这正是BABEL实现的目的。

BABEL是一个javascript编译器,并导入其“ browser.min.js”文件,使它能够“编译”“
text / babel”脚本标签内的代码,并将其作为普通javascript执行。

因此,在您的示例中,您具有以下代码:

<div id="example"></div>
<script type="text/babel">
  ReactDOM.render(
    <h1>Hello, world!</h1>,
    document.getElementById('example')
  );
</script>

页面加载后,“ browser.min.js”将对其进行处理,并且将要执行的javascript代码应如下所示:

ReactDOM.render(
  React.createElement('H1', null, 'Hello world!'), 
  document.getElementById('example'));

如果您不想加载此“ browser.min.js”,则主要选择是:

  1. 将您的React代码放在单独的文件中,并在进行更改时将它们编译(所有这些都是在服务器端)。您的html代码应引用已编译的文件(应仅包含原始JS代码),而不是原始的JSX文件。有多种方法可以执行此操作,具体取决于您的编码工具。

  2. 仅使用原始JS创建和定义您的React“ Html”层次结构(React.createElement(…))。

在其他问题中应更详细地说明这些方法。



 类似资料:
  • 互联网是超文本标记语言(HTML)页面的集合,它们彼此链接以形成概念性信息网络。随着时间的推移,静态资源数量增加,图像等更丰富的项目开始成为Web结构的一部分。 高级服务器技术允许动态服务器页面 - 其内容基于查询生成的页面。 很快,需要拥有更多动态网页才能获得动态超文本标记语言(DHTML)。一切都归功于JavaScript。在接下来的几年中,我们看到了跨帧通信,试图避免页面重新加载,然后在帧内

  • 当前信息时代,哪里都是应用程序。这些应用程序们不仅仅是运行人们工作场所的工具 - 它们现在正在经营人们的生活。 对即时响应的需求,完美的行为和更多的功能是前所未有的。 而且,当然,人们期望应用程序在不同类型的设备上运行平稳,特别是在移动设备上。 应用程序执行的速度与它所做的一样重要。 NGINX的核心功能,例如其具有高性能HTTP和反向代理服务器的大规模可扩展事件驱动架构,访问和带宽控制以及与各种

  • 开发人员和运营工程师是两个不同的组织团队,如果发现这两个团队在错误的轨道上协作,则表明需要DevOps。以下是两个团队经常出现的一些问题: 在DevOps之前,开发和运营团队完全孤立。 测试和部署是在设计构建之后完成的独立活动。因此,他们比实际构建周期消耗更多时间。 在不使用DevOps的情况下,团队成员将大量时间花在测试,部署和设计上,而不是构建项目。 手动代码部署会导致生产中出现人为错误 编码

  • 问题内容: 根据PreparedStatement.setNull的Java文档,“注意:您必须指定参数的SQL类型”。该方法需要列的SQL类型的原因是什么? 我注意到传递java.sql.Types.VARCHAR还可用于非varchar列。是否存在不适合使用VARCHAR的方案(某些列类型或某些数据库提供程序)? 谢谢。 问题答案: 根据PreparedStatement.setNull的Ja

  • 问题内容: 我知道的是,全局变量和静态变量存储在段中,而未初始化的数据存储在段中。我不明白的是,为什么我们有专用于未初始化变量的段?如果未初始化的变量在运行时分配了值,那么该变量是否仅仍存在于段中? 在以下程序中, 在段中,并且在段中;那是对的吗?如果我的理解是错误的,请纠正我。 另外,请考虑以下程序, 问题答案: 原因是减小程序大小。想象一下,您的C程序在嵌入式系统上运行,其中代码和所有常量都保

  • 问题内容: 为什么需要放入GUI更新代码? 为什么Swing本身无法在内部对其进行处理?为什么调用者必须关心swing如何处理UI更新? 问题答案: 摆动对象不是线程安全的。顾名思义,允许在以后的某个时间执行任务;但更重要的是,该任务将在AWT事件分配线程上执行。使用时r,任务是异步执行的;还有,直到任务完成执行后才会返回。