【问题标题】:How do I Make and Use React components?如何制作和使用 React 组件?
【发布时间】:2017-08-18 17:52:30
【问题描述】:

我试图了解如何在 React 应用程序中创建(可能导出?)和使用(导入?)组件?例如,下面的小型 React 应用程序是一个 .HTML 文件并且运行良好。它一遍又一遍地显示随机数。因此,如果我想将类 ShowRandomNumbers extends React.Component 放入一个单独的文件中(带有扩展名....什么 .JSX?)并在带有 import 语句的 HTML 文件中使用它,我需要哪些步骤做?

我习惯了使用外部 JS 和 CSS 文件的概念,比如:

<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.38/browser.js"></script>

<link rel="stylesheet" href="../../css/base200.css" />

但我只是使用简单的编辑器和另存为独立文件创建的那些文件。我在谷歌上搜索了导出默认值和导入,我看到了类似的语法 导出默认应用程序;并从 './App.jsx' 导入 App;但没有明确的“如何”。 我需要实用程序来创建 JSX 文件吗?

我们将不胜感激。 谢谢。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
<title>79E - ALL CDN</title>
</head>

<body>

<div id="container"></div>

<script type="text/babel">

class ShowRandomNumbers extends React.Component {

  constructor(props) {  super(props);  }  

  render() {
    var elapsed = Math.round(this.props.timeNow  / 100);
    var seconds = elapsed / 10 + (elapsed % 10 ? '' : '.0' );
    var r1 = this.props.random1;

    return ( 
    <p >Running for  {seconds} seconds.  Random 1 is:  {r1}   Random 2 is:  {this.props.random2}      </p >
    ); 

  }  // render -- END
}  // Class - End

var start = new Date().getTime();

setInterval(function() {
    ReactDOM.render(
      <ShowRandomNumbers 
        timeNow={ new Date().getTime() - start  } 
        random1= { Math.floor(Math.random() * (500 - 100 + 1)) + 100 }
        random2= { Math.floor(Math.random() * (600 - 100 + 1)) + 100 }
      />,  
      document.getElementById('container')     
    );
 }, 50);
</script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.38/browser.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.2/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.2/react-dom.min.js"></script>

</body>
</html>

【问题讨论】:

  • jsx文件不能直接使用,浏览器不理解jsx文件。您需要将其转换为 js 文件。您可以使用this module 来完成此任务。
  • 感谢您的回复。我一直在看 babel 和 npm 等。重新导入/导出,在我看来(可能是错误的)导入有点,嗯,假的!在那个 webpack 中,所有东西都被整合到一个模块中,所以没有“真正的”动态加载。比如说,Windows 操作系统中的 .dll 会在需要时加载。在这种情况下,它不就像一个常规的脚本语句吗?

标签: reactjs jsx es6-modules es6-class


【解决方案1】:

为了利用导入/导出,您需要使用模块捆绑器。 Webpack 是 React 应用程序的标准选择。基本上,这允许您从一个文件中导出组件(和其他 javascript 函数、常量等)并将它们导入另一个文件并使用它们。 Webpack 从根应用程序文件开始,通过分析导入/导出来构建依赖关系图。它将所有必要的代码捆绑在一起,并为您提供一个文件,您可以通过脚本标签将其包含在内,就像您习惯的那样。

学习如何使用 Webpack 设置项目对很多人来说可能有点令人生畏和绊脚石。如果您刚开始使用 React,我强烈建议您查看 Create React App。它为您提供了一个现代的 React 开发环境,而无需自己担心任何配置。

【讨论】:

  • 感谢您的回复。有很大帮助。我错误地混合了技术。这就是我认为的问题所在。 1) 导入/导出是 ES6 的特性。 (与 React 无关) 2) 对导入/导出的实际支持不在浏览器中(至少现在还没有。)请参阅下面的 URL:ES6。 3)因此,需要其他技术来进行导入/导出工作,例如 WebPack。我觉得这有点奇怪。就像丰田推广刹车之类的功能,但把它留给其他人来实施。我看到关于刹车的光鲜广告,并假设它们随每辆丰田汽车一起提供。创建反应应用程序。我会调查的。
  • 是的,这就是现代前端开发的现实;它不是特定于 React 的。尽管现代浏览器确实与 ES6 功能具有很好的兼容性,但您通常仍然需要将代码(使用 Babel)转换为 ES5 以获得旧版浏览器的支持。所以会有更多的初始设置成本,但为了显着改善开发人员体验,权衡是值得的。 create-react-app 专门用于抵消初始设置成本并让您启动并运行。了解所有这些工具很重要,但通常不是您想要开始的。
猜你喜欢
  • 1970-01-01
  • 2021-08-15
  • 1970-01-01
  • 2021-03-13
  • 2015-01-19
  • 2021-03-25
  • 2015-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多