How to import and export components using React + ES6 + webpack?

后端 未结 6 1579
隐瞒了意图╮
隐瞒了意图╮ 2020-11-28 19:23

I\'m playing around with React and ES6 using babel and webpack. I want to build several components in different files, im

相关标签:
6条回答
  • 2020-11-28 19:44

    Wrapping components with braces if no default exports:

    import {MyNavbar} from './comp/my-navbar.jsx';
    

    or import multiple components from single module file

    import {MyNavbar1, MyNavbar2} from './module';
    
    0 讨论(0)
  • 2020-11-28 19:45

    To export a single component in ES6, you can use export default as follows:

    class MyClass extends Component {
     ...
    }
    
    export default MyClass;
    

    And now you use the following syntax to import that module:

    import MyClass from './MyClass.react'
    

    If you are looking to export multiple components from a single file the declaration would look something like this:

    export class MyClass1 extends Component {
     ...
    }
    
    export class MyClass2 extends Component {
     ...
    }
    

    And now you can use the following syntax to import those files:

    import {MyClass1, MyClass2} from './MyClass.react'
    
    0 讨论(0)
  • 2020-11-28 19:48

    There are two different ways of importing components in react and the recommended way is component way

    1. Library way(not recommended)
    2. Component way(recommended)

    PFB detail explanation

    Library way of importing

    import { Button } from 'react-bootstrap';
    import { FlatButton } from 'material-ui';
    

    This is nice and handy but it does not only bundles Button and FlatButton (and their dependencies) but the whole libraries.

    Component way of importing

    One way to alleviate it is to try to only import or require what is needed, lets say the component way. Using the same example:

    import Button from 'react-bootstrap/lib/Button';
    import FlatButton from 'material-ui/lib/flat-button';
    

    This will only bundle Button, FlatButton and their respective dependencies. But not the whole library. So I would try to get rid of all your library imports and use the component way instead.

    If you are not using lot of components then it should reduce considerably the size of your bundled file.

    0 讨论(0)
  • 2020-11-28 19:57

    Try defaulting the exports in your components:

    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>
          );
        }
    }
    

    by using default you express that's going to be member in that module which would be imported if no specific member name is provided. You could also express you want to import the specific member called MyNavbar by doing so: import {MyNavbar} from './comp/my-navbar.jsx'; in this case, no default is needed

    0 讨论(0)
  • 2020-11-28 20:06

    MDN has really nice documentation for all the new ways to import and export modules is ES 6 Import-MDN . A brief description of it in regards to your question you could've either:

    1. Declared the component you were exporting as the 'default' component that this module was exporting: export default class MyNavbar extends React.Component { , and so when Importing your 'MyNavbar' you DON'T have to put curly braces around it : import MyNavbar from './comp/my-navbar.jsx';. Not putting curly braces around an import though is telling the document that this component was declared as an 'export default'. If it wasn't you'll get an error (as you did).

    2. If you didn't want to declare your 'MyNavbar' as a default export when exporting it : export class MyNavbar extends React.Component { , then you would have to wrap your import of 'MyNavbar in curly braces: import {MyNavbar} from './comp/my-navbar.jsx';

    I think that since you only had one component in your './comp/my-navbar.jsx' file it's cool to make it the default export. If you'd had more components like MyNavbar1, MyNavbar2, MyNavbar3 then I wouldn't make either or them a default and to import selected components of a module when the module hasn't declared any one thing a default you can use: import {foo, bar} from "my-module"; where foo and bar are multiple members of your module.

    Definitely read the MDN doc it has good examples for the syntax. Hopefully this helps with a little more of an explanation for anyone that's looking to toy with ES 6 and component import/exports in React.

    0 讨论(0)
  • 2020-11-28 20:06

    I Hope this is Helpfull

    Step 1: App.js is (main module) import the Login Module

    import React, { Component } from 'react';
    import './App.css';
    import Login from './login/login';
    
    class App extends Component {
      render() {
        return (
          <Login />
        );
      }
    }
    
    export default App;
    

    Step 2: Create Login Folder and create login.js file and customize your needs it automatically render to App.js Example Login.js

    import React, { Component } from 'react';
    import '../login/login.css';
    
    class Login extends Component {
      render() {
        return (
          <div className="App">
            <header className="App-header">
              <h1 className="App-title">Welcome to React</h1>
            </header>
            <p className="App-intro">
              To get started, edit <code>src/App.js</code> and save to reload.
            </p>
          </div>
        );
      }
    }
    
    export default Login;
    
    0 讨论(0)
提交回复
热议问题