如何正确地将React组件存储在单独的文件中并导入React?

2024-04-10

我已经完成了一些 React 教程的介绍,并尝试将迄今为止的一些知识运用起来。我已经成功地在 a 中创建了一些组件<script type='text/babel'>并使用 babel 的browser.js将其转换为浏览器中的 JS 客户端。

但是,我现在尝试将组件分解为单独的文件,对它们进行转译,然后将转译后的 JS 提供给客户端,而不是在客户端完成转译。

我对如何正确地将 ReactJS 导入我的组件 JSX 文件感到困惑。我之前没有构建过大型JS应用程序,所以我不熟悉将库导入到其他模块的方法。

这是我的组件 JSX 文件之一:

var SidebarFilter = React.createClass({
  render: function() {
    return (
        <div className="btn-group">
          Some markup removed for brevity. 
        </div>
    );
  }
});

在我的主 html 文件中,如果我有:

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.7/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.7/react-dom.js"></script>

在我的任何<script>我的组件的标签,一切正常。但如果组件放在react/reactdom脚本标签之上,则不起作用。

我见过 javascript 有一个import还有require,但我不确定有什么区别,什么时候使用哪个更好,以及是否需要任何额外的构建或者它们是否在浏览器中正确使用。

Thanks!


如果您刚刚学习 React,那么您使用 script 标签的方式就可以在 html 中进行。

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.7/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.7/react-dom.js"></script>

如果您想开发一个可以部署到生产环境的应用程序,您需要遵循以下步骤。毫无疑问,互联网上有更好的教程,但它会给您一些想法。

1.需要Browserfiy或Webpack:

在浏览器中你不能require or import模块就像您在编写 Node.js 代码时通常所做的那样。在...的帮助下浏览器化/Webpack你可以编写使用的代码require/import与在节点环境中使用它的方式相同。我假设你会使用webpack考虑到它的受欢迎程度。

2.安装依赖(es6)

这些是您的项目中需要的最小依赖项(package.json)让它工作

  "devDependencies": {
        "babel-cli": "^6.3.17",
        "babel-core": "^6.3.21",
        "babel-eslint": "^5.0.0-beta6",
        "babel-loader": "^6.2.0",
        "babel-preset-es2015": "^6.3.13",
        "babel-preset-react": "^6.3.13",
        "babel-preset-stage-3": "^6.3.13",
        "css-loader": "^0.23.0",
        "eslint": "^1.10.3",
        "eslint-loader": "^1.1.1",
        "eslint-plugin-react": "^3.12.0",
        "style-loader": "^0.13.0",
        "webpack": "^1.12.9",
        "webpack-dev-server": "^1.14.0"
      },
      "dependencies": {
        "react": "^15.0.0-rc.1",
    "react-dom": "^15.0.0-rc.1"

3.编写你的 webpack-config.js 文件

一个样品webpack配置文件应该是这样的。不要问我每一点,而要看看webpack教程,因为我无法在这里解释所有内容。只要记住这样一个事实:Webpack是一个模块捆绑器,用于捆绑javascript以及浏览器的其他资产。

var path    = require('path');
var webpack = require('webpack');

module.exports = {
  devtool: 'source-map',
  entry: {
    main: [
      'webpack-dev-server/client?http://localhost:8080',
      'webpack/hot/only-dev-server',
      './src/index.js'
    ]
  },
  output: {
    path: path.join(__dirname, 'public'),
    publicPath: 'http://localhost:8080/public/',
    filename: 'bundle.js'
  },
  plugins: [
    new webpack.HotModuleReplacementPlugin(),
    new webpack.NoErrorsPlugin()
  ],
  module: {
   loaders: [
      {
        test      : /\.jsx?$/,
        include   : path.join(__dirname, 'src'),
        loader    : 'react-hot!babel'
      },
      {
        test      : /\.scss$/,
        include   : path.join(__dirname, 'sass'),
        loaders   : ["style", "css?sourceMap", "sass?sourceMap"]
      },
      {
          test    : /\.(png|jpg|svg)$/,
          include : path.join(__dirname, 'img'),
          loader  : 'url-loader?limit=30000&name=images/[name].[ext]'
     } // inline base64 URLs for <=30k images, direct URLs for the rest
    ]
  },
  resolve: {
    extensions: ['', '.js', '.jsx']
  },
  devServer: {
    historyApiFallback: true,
    contentBase: './'
  }
};

4.为您的应用程序设置入口点和路线

src->index.js src->routes.js

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import {Router,browserHistory} from 'react-router';
import routes from './routes';

ReactDOM.render(
    <Router routes={routes} history={browserHistory}/>
  , document.querySelector('.init')
);

路线.js

import React from 'react';
import { Route, IndexRoute } from 'react-router';
import App from './components/app';
import Home from './components/home';


module.exports = (
       <Route path="/" component={App}>
           <IndexRoute component={Home}/>
       </Route>
)

5.在项目根目录中设置index.html

<!DOCTYPE html>
<html>
  <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <title>Welcome to ReactJs</title>
  </head>
  <body>
    <div class="init"></div>
  </body>
  <script src="./public/bundle.js"></script>
</html>

6.跑步

形成您的项目根类型

webpack-dev-server --progress --colors

导入并要求

import and require在功能上非常相似。唯一的区别是importes6 中有新的语法糖吗?require与 es5 一起使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何正确地将React组件存储在单独的文件中并导入React? 的相关文章

  • 在特定页面上执行 javascript 的正确“Rails”方式

    我试图在特定页面上运行 javascript 而我唯一的解决方案似乎是反模式 我有controller js内部生成的assets javascripts 我在用着gem jquery turbolinks 我的代码类似于以下内容 docu
  • 类型错误:尝试将未定义的属性包装为函数

    下面的例子是经过简化的 我有一个吸气剂方法 class MyClass constructor get myMethod return true 这是由 babel 处理的 我想这样嘲笑它 var sinon require sinon v
  • 为什么 window 与 Internet Explorer 中的 window.self 不同?

    关于我如何遇到这个问题有一个复杂的背景故事 但为什么self属性不完全等于窗口本身 在 Safari 和 Firefox 及其朋友中 结果如我所料 gt window window self true gt window window se
  • 如何在React Native Android中获取响应头?

    您好 我想在获取 POST 请求后获取响应标头 我尝试调试看看里面有什么response with console log response 我可以从以下位置获取响应机构responseData但我不知道如何获取标题 我想同时获得标题和正文
  • 如何在网站上使用 svg 元素制作块的屏幕截图?

    我在网站上创建了一个构造函数 其本质是将所选元素及其颜色 svg中的元素 添加到访问者选择的背景和背景颜色 png中的背景 中 然后必须单击 保存 结果 按钮并仅执行工作区的屏幕截图 我写了这个脚本 但它需要屏幕截图 但只有背景 并忽略选定
  • IntersectionObserver是否支持水平滚动观察?

    我制作了几个垂直滚动 IntersectionObserver 模块 但我对水平滚动感兴趣 根将是 div 观察目标将是 img 我想观察当 img 放大但 div 保持视口宽度时的变化 我什至不确定移动 Safari 是否会将缩放后的图片
  • 导航栏下拉菜单(折叠)在 Bootstrap 5 中不起作用

    我在尝试使用以下命令创建响应式菜单或下拉按钮时遇到问题Bootstrap 5一切似乎都正常 导航图标和下拉图标出现 但它不起作用 当我单击nav图标或dropdown按钮 无dropdown menu apears 我想特别提到的是 我还包
  • ReactTransitionGroup 不适用于 React-redux 连接组件

    我正在开发一个更大的项目 但我创建了这个简短的示例来说明问题 如果我使用Box组件 它的工作原理 它在控制台中输出componentWillEnter and componentWillLeave当我们点击按钮时 如果我使用BoxConta
  • 如何使用 Javascript 设置查询字符串

    有没有办法使用 javascript 设置查询字符串的值 我的页面有一个过滤器列表 单击该列表时 它将更改右侧的页内结果窗格 我正在尝试更新 url 的查询字符串值 因此如果用户离开页面 然后单击 后退 按钮 他们将返回到最后一个过滤器选择
  • JavaScript RegEx:不同的结果:使用字符串和使用正则表达式“文字”构建模式?

    使用 RegExp 文字与字符串之间有什么区别吗 http jsfiddle net yMMrk http jsfiddle net yMMrk String prototype lastIndexOf function pattern p
  • 改变 JavaScript 中的顶部填充

    以下是我在 css 中设置顶部填充的方法 body font size font size px margin 0 padding 100px 0 20px 0 width 100 important 如何使用最简单的 javascript
  • 用于选择特定 div 中具有特定类的锚元素的 jQuery 选择器是什么

    我有一些这样的代码 我想选择每个 a 带有类的标签status在 div 中foo div a class status a div 你可以这样做 foo find status a
  • 如何使用 JavaScript 或 jQuery 克隆 HTML 元素的样式对象?

    我正在尝试克隆元素的样式对象 这应该允许我在更改后重置所述元素的样式 例如 el style left 50px curr style left 50px Modify the elements style The cloned style
  • Google Maps API (v3) 添加/更新标记

    编辑 它现在可以工作 但如果用户不允许或没有基于位置的服务 则不会加载 请参阅 jsfiddle 示例接受的答案评论 我已经浏览了一些教程和问题 但我无法安静地理解正在发生的事情 或者在这种情况下 没有发生 当用户单击链接时 我正在加载地图
  • 使用javascript动态更新css内容

    需要将 css 更新为动态值 我不确定最好的方法是什么 div style zoom 1 div 缩放级别将根据窗口大小调整触发 应用程序将相应缩放 我将此应用程序加载到 cordova 中并让它在 iPAD 中运行 然后我意识到需要使用
  • 使用 Enzyme 测试 `React.createRef` api

    我想测试下面的类 它使用React createRef api 不过 快速搜索并没有发现任何这样做的例子 有人成功过吗 我该如何嘲笑裁判 理想情况下我想使用shallow class Main extends React Component
  • 将数组从 jquery ajax 传递到代码后面

    我必须将二维数组传递给在asp net网页代码后面编写的页面方法我有一个变量objList作为二维数组 我使用以下代码来实现此目的 但没有成功 并且未调用页面方法 脚本语言 function BindTable objList ajax u
  • 如何通过索引访问 JSON 对象中的字段

    我知道这不是最好的方法 但我别无选择 我必须通过索引访问 JSONObject 中的项目 访问对象的标准方法是只写this objectName or this objectName 我还找到了一种获取 json 对象内所有字段的方法 fo
  • 测量窗口偏移

    有没有一种方法可以测量 jQuery 中窗口的偏移量 以便我可以比较 固定 元素和相对定位元素的位置 我需要能够知道窗口滚动了多远 以便我可以使用该图来计算固定元素的高度 相对于视口顶部 和相对对象的高度 相对于顶部 之间的差异文件的内容
  • 使用velocity.js制作可拖动元素的动画

    我正在使用velocity js 为用户拖动的可拖动 SVG 元素设置动画 然而 velocity js 将先前的 mousemove 坐标排队并通过所有后续的 mousemove 坐标进行动画处理 我想要的是velocity js 不要对

随机推荐

  • MVC 3 DevExpress - 返回到控制器的模型为空

    问题确实很简单 但我似乎无法解决 我正在将 Razor 引擎与 DevExpress 组合框一起使用 我有这个代码 MODEL public class TestModel public string Name get set public
  • Postgresql:如果列以减号结尾,则删除文本字段中的最后一个字符

    我想删除列中的最后一个字符 如果它以减号结尾 我怎样才能在 postgresql 中做到这一点 例如 sdfs dfg4t etze45z5z gt sdfs dfg4t etze45z5z gsdhfhsfh rgertggh gt st
  • 获取数据包中的所有层

    如何获取 scapy 中所有图层的列表 例如 Ether IP UDP DNS or Ether IP TCP HTTP 我唯一能想到的就是做一个packet summary 并解析输出 这看起来很粗糙 我认为应该有一个内置的方法 但在文档
  • 静态库在 iOS 模拟器上出现错误并在 iOS 设备上运行

    目前我正在开发一个iOS应用程序 iOS 6 我需要在其中实现一个静态库 我使用这个成功实现了静态库tutorial http www icodeblog com 2011 04 07 creating static libraries f
  • 使用 espresso 的 testUI (Jenkins)

    该应用程序正在本地通过 espresso 测试 我的意思是直接到设备和 genymotion 模拟器 当我使用 Jenkins 构建应用程序的映像时 浓缩咖啡测试未成功 我收到此错误 JENKINS java lang RuntimeExc
  • 仅颤动具有左上角和右上角边框的顶部边框

    我只需要向小部件 最好是容器 卡片 添加具有左上 右上边框半径的顶部边框阴影 我不需要左 右 下边框 请看下图 我尝试使用如下容器 Container child buildRemaining context decoration BoxD
  • Postman 中的“传输开始”是什么意思?

    我试图弄清楚为什么 API 需要很长时间才能处理我的请求 并在 Postman 中发现了这一点 传输开始是什么意思 https community postman com t how to interpret time details in
  • 如何在jquery-mobile/phonegap的$(document).ready()/onDeviceReady()上加载脚本[重复]

    这个问题在这里已经有答案了 我正在使用 PhoneGap 和 jQuery Mobile 开发一个应用程序 现在 当页面加载时 我想加载一个script js file 基本上onDeviceReady or document ready
  • android studio 2.2如何在没有android-apt插件的情况下应用dagger2

    我的项目 build gradle buildscript repositories jcenter dependencies classpath com android tools build gradle 2 2 0 alpha3 cl
  • 对(可能的)Android 内存泄漏一无所知

    我一直面临着一些烦人的事情OutOfMemoryErrors 即使在确保我的所有位图都正确缩放等之后 事实上 这个问题似乎与位图根本无关 但我可能是错的 出于测试和错误隔离的目的 我一直使用导航抽屉 不使用后退按钮 在两个活动 让我们称之为
  • 如何在 React 中将 select 元素与 prop 双向绑定

    在反应中创建选择元素的批准方法是什么 它与包含组件的选择的道具有两种方式绑定 默认选择应该是 prop 的当前属性 可以生成 因为该值是任意的 并且在选择时 prop 属性应该反映选择 此外 应该可以将值直接写入选择字段 我将选项添加到状态
  • 如何检测正在运行的 MSI 安装 [重复]

    这个问题在这里已经有答案了 我正在寻找一种方法来检测 Windows Installer 安装是否已在进行中 到目前为止我发现的是 检查注册表项 HKEY LOCAL MACHINE SOFTWARE Microsoft Windows C
  • 通配符证书对 mydomain.com 无效

    我创建了通配符证书来支持我的网站域和子域 新证书适用于我的子域 例如 www mydomain com sub mydomain com 但是当我尝试访问 mydomain com 时 我收到证书警告 该证书仅对 mydomain com
  • 葡萄酒规格文件

    我有一个名为的 Windows DLLmorag dll包含函数 foo 和 bar 我还有一个名为的 Linux SOmorag so包含 foo 和 bar 的 Linux 实现 每个平台上的参数相同 我有一个可以加载的 Windows
  • 来自子进程的大数据块的 pexpect 超时

    我正在使用 pexpect 调用另一个提示输入 raw input 的 python 脚本 py27 我试图围绕这个脚本构建一个 GUI 包装器而不修改它 我遇到的问题是 我调用的脚本在下一个命令提示符之前执行时返回了大量数据 例如 10K
  • 如何在集成测试中使用 Propagation.REQUIRES_NEW 回滚嵌套事务

    我对扩展以下基类的各种服务进行了几个集成测试 ContextConfiguration locations classpath applicationContext test xml TransactionConfiguration tra
  • 在 Firebase 中对数据进行排序

    我正在使用 Firebase listview 如下所示 它的工作方式就像一个魅力 但问题是它在我的 listview lv 末尾显示子项 Posts 中最后按下的键 我希望最后按下的键最重要的是显示 或者我是否可以按日期对其进行排序 qu
  • MS Access SQL,更改数据类型

    当尝试在 Access 的设计模式下将数据类型从文本更改为数字 使用接近 2 GB 的数据库 时 我不断收到 磁盘空间或内存不足 错误 因此我找到了一种解决方法 基本上创建一个新列 将数据类型设置为数字 复制旧列内容 删除旧列并将新列重命名
  • 给定源顶点,查找有向图中具有环路的所有路径

    我无法解决这个问题 我必须找到所有simple从源顶点开始的路径s含有一个simple有向图中的循环 即不允许重复 当然除了循环在路径上连接回的单个重复顶点 我知道如何使用 DFS 访问来查找图形是否有循环 但我找不到一种方法来使用它来查找
  • 如何正确地将React组件存储在单独的文件中并导入React?

    我已经完成了一些 React 教程的介绍 并尝试将迄今为止的一些知识运用起来 我已经成功地在 a 中创建了一些组件