Reactjs 如何使用React+;ES6&x2B;网页包?
我正在玩Reactjs 如何使用React+;ES6&x2B;网页包?,reactjs,ecmascript-6,webpack,Reactjs,Ecmascript 6,Webpack,我正在玩React和ES6,使用babel和webpack。我想在不同的文件中构建几个组件,导入到单个文件中,并将它们与webpack 假设我有几个类似的组件: export class MyClass1 extends Component { ... } export class MyClass2 extends Component { ... } my-navbar.jsx import React from 'react'; import Navbar from 'react-bo
React
和ES6
,使用babel
和webpack
。我想在不同的文件中构建几个组件,导入到单个文件中,并将它们与webpack
假设我有几个类似的组件:
export class MyClass1 extends Component {
...
}
export class MyClass2 extends Component {
...
}
my-navbar.jsx
import React from 'react';
import Navbar from 'react-bootstrap/lib/Navbar';
export class MyNavbar extends React.Component {
render(){
return (
<Navbar className="navbar-dark" fluid>
...
</Navbar>
);
}
}
构建并运行项目后,我的浏览器控制台中出现以下错误:
Error: Invariant Violation: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. Check the render method of `MyPage`.
我做错了什么?如何正确导入和导出我的组件?尝试默认设置在组件中导入导出:
import React from 'react';
import Navbar from 'react-bootstrap/lib/Navbar';
export default class MyNavbar extends React.Component {
render(){
return (
<Navbar className="navbar-dark" fluid>
...
</Navbar>
);
}
}
从“React”导入React;
从“react bootstrap/lib/Navbar”导入导航栏;
导出默认类MyNavbar扩展React.Component{
render(){
返回(
...
);
}
}
默认情况下,您表示该模块中的成员,如果未提供特定的成员名称,则将导入该模块。您还可以这样表示您想要导入名为MyNavbar的特定成员:import{MyNavbar}from'/comp/my navbar.jsx';在这种情况下,如果没有默认导出,则不需要使用默认值用大括号包装组件:
import {MyNavbar} from './comp/my-navbar.jsx';
或从单个模块文件导入多个组件
import {MyNavbar1, MyNavbar2} from './module';
MDN提供了非常好的文档,介绍了ES 6中所有导入和导出模块的新方法。关于您的问题,您可以:
导出默认类MyNavbar扩展了React.Component{
,因此在导入“MyNavbar”时,不必在其周围加上花括号:从“/comp/my navbar.jsx”导入MyNavbar;
。
但如果在导入周围不加大括号,则会告诉文档此组件已声明为“导出默认值”。如果不是,则会出现错误(就像您所做的那样)导出类MyNavbar扩展React.Component{
,则必须将“MyNavbar”的导入用花括号括起来:
从“/comp/my navbar.jsx”导入{MyNavbar};
从“我的模块”导入{foo,bar};
其中foo和bar是模块的多个成员
一定要阅读MDN文档,它有很好的语法示例。希望这有助于为那些想在React中玩弄ES 6和组件导入/导出的人提供更多的解释。要在ES6中导出单个组件,可以使用
导出默认值
,如下所示:
class MyClass extends Component {
...
}
export default MyClass;
现在使用以下语法导入该模块:
import MyClass from './MyClass.react'
如果要从单个文件导出多个组件,则声明如下所示:
export class MyClass1 extends Component {
...
}
export class MyClass2 extends Component {
...
}
现在,您可以使用以下语法导入这些文件:
import {MyClass1, MyClass2} from './MyClass.react'
我希望这是有益的 步骤1:App.js是(主模块)导入登录模块
import React, { Component } from 'react';
import './App.css';
import Login from './login/login';
class App extends Component {
render() {
return (
<Login />
);
}
}
export default App;
在react中导入组件有两种不同的方式,建议使用组件方式
import { Button } from 'react-bootstrap';
import { FlatButton } from 'material-ui';
这非常好用,但它不仅捆绑Button和FlatButton(及其依赖项),而且捆绑整个库
组件导入方式
import { Button } from 'react-bootstrap';
import { FlatButton } from 'material-ui';
缓解这种情况的一种方法是尝试只导入或需要所需的内容,比如组件方式。使用相同的示例:
import Button from 'react-bootstrap/lib/Button';
import FlatButton from 'material-ui/lib/flat-button';
这只会捆绑Button、FlatButton和它们各自的依赖项。但不会捆绑整个库。因此,我会尝试摆脱所有库导入,改用组件方式
如果您没有使用大量的组件,那么它应该会大大减少捆绑文件的大小。这对我不起作用。在我自己的项目中运行它时,我收到一个错误,说它无法导入组件。您知道为什么吗?使用默认值,您表示它将成为该模块中的成员,如果没有特定的memb,将导入该模块提供了er名称。您还可以通过这样做表示您希望导入名为MyNavbar的特定成员:从“/comp/my navbar.jsx”导入{MyNavbar};在这种情况下,不需要默认值这应该是可接受的答案。这是es6中的
命名导出
,是比使用默认值
更安全的导出方式“如果没有默认导出,则使用大括号包装组件”就足够了。TNX可能会有所帮助:在我的情况下,路径中缺少“/”。这听起来有点奇怪,因为组件处于相同的文件夹级别。export
关键字详细信息。目前,任何web浏览器都不支持它。
import Button from 'react-bootstrap/lib/Button';
import FlatButton from 'material-ui/lib/flat-button';