在react.js中导出多个模块

pac*_*tie 34 reactjs

react.js新手,并尝试按照教程.不幸的是,页面中给出的代码不起作用.webpack抱怨道

ERROR in ./App.jsx
Module build failed: SyntaxError: Only one default export allowed per module.
Run Code Online (Sandbox Code Playgroud)

不知道如何解决它.谢谢.

=== App.jsx ====

import React from 'react';
import ReactDOM from 'react-dom';
import { Router, Route, Link, browserHistory, IndexRoute  } from 'react-router'

class App extends React.Component {
   render() {
      return (
         <div>
            <ul>
               <li><Link to = "/home">Home</Link></li>
               <li><Link to = "/about">About</Link></li>
               <li><Link to = "/contact">Contact</Link></li>
            </ul>

           {this.props.children}
         </div>
      )
   }
}

export default App;

class Home extends React.Component {
   render() {
      return (
         <div>
            <h1>Home...</h1>
         </div>
      )
   }
}

export default Home;

class About extends React.Component {
   render() {
      return (
         <div>
            <h1>About...</h1>
         </div>
      )
   }
}

export default About;

class Contact extends React.Component {
   render() {
      return (
         <div>
            <h1>Contact...</h1>
         </div>
      )
   }
}

export default Contact;
Run Code Online (Sandbox Code Playgroud)

=== main.js ===

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.jsx';

ReactDOM.render(<App/>, document.getElementById('app'));
Run Code Online (Sandbox Code Playgroud)

UPDATE1

我评论了所有,export default并在最后添加了以下内容

module.exports = {
    App: App,
    Home: Home,
    About: About,
    Contact: Contact
}
Run Code Online (Sandbox Code Playgroud)

现在没有编译错误,但网页是空白的.我不确定这里有什么问题.

Tom*_*zyk 66

您只能有一个默认导出,您声明如下:

export default App; 要么 export default class App extends React.Component {...

后来呢 import App from './App'

如果你想要输出更多东西,你可以使用你没有关键字声明的命名导出default:

export {
  About,
  Contact,
}
Run Code Online (Sandbox Code Playgroud)

要么:

export About;
export Contact;
Run Code Online (Sandbox Code Playgroud)

要么:

export const About = class About extends React.Component {....
export const Contact = () => (<div> ... </div>);
Run Code Online (Sandbox Code Playgroud)

然后你导入它们像:

import App, { About, Contact } from './App';
Run Code Online (Sandbox Code Playgroud)

编辑:

教程中存在错误,因为无法在同一main.js文件中进行3次默认导出.除了那个为什么导出任何东西,如果它没有在文件外使用?正确main.js:

import React from 'react';
import ReactDOM from 'react-dom';
import { Router, Route, Link, browserHistory, IndexRoute  } from 'react-router'

class App extends React.Component {
...
}

class Home extends React.Component {
...
}


class About extends React.Component {
...
}


class Contact extends React.Component {
...
}


ReactDOM.render((
   <Router history = {browserHistory}>
      <Route path = "/" component = {App}>
         <IndexRoute component = {Home} />
         <Route path = "home" component = {Home} />
         <Route path = "about" component = {About} />
         <Route path = "contact" component = {Contact} />
      </Route>
   </Router>

), document.getElementById('app'))
Run Code Online (Sandbox Code Playgroud)

EDIT2:

另一件事是本教程基于react-router-V3,它具有与v4不同的api.


ibo*_*oss 5

当你

import App from './App.jsx';
Run Code Online (Sandbox Code Playgroud)

这意味着它将导入您的任何内容export default。你可以将App里面的类重命名App.jsx为你想要的任何名称,只要export default它能工作,但你只能有一个导出默认值。

所以你只需要export default App导出其余的就不需要了。

如果您仍想导出其余组件,则需要命名导出。

https://developer.mozilla.org/en/docs/web/javascript/reference/statements/export