【问题标题】:ReactJS Error : Only one default export allowed per moduleReactJS 错误:每个模块只允许一个默认导出
【发布时间】:2017-01-14 15:15:00
【问题描述】:

这个多重组件不起作用;

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>Home</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;

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

), document.getElementById('app'))

它给出了以下错误;

./main.js 中的错误模块构建失败:语法错误: C:/Users/hasithay/Desktop/reactApp/main.js:只有一个默认导出 每个模块允许。

31 | } 32 |

33 |导出默认主页; | ^ 34 | 35 |类关于扩展 React.Component { 36 |渲染() {

@multi main webpack:bundle 现在有效

答案应该是三个可点击的链接,可用于在应用启动时更改路线。

【问题讨论】:

  • 这个错误会告诉你到底出了什么问题。每个文件不能有多个默认导出。如果您要在不同的文件中导入某些内容,则只需要导出内容。如果您在同一个文件中访问组件,则无需导出任何内容。

标签: components


【解决方案1】:

多个组件确实有效,但您需要导出带有名称的组件,并且您只能导出一个默认组件。

如下例所示,我将 App 组件导出为默认组件,将其他组件 Home、About、Contact 导出为命名组件。

对于命名组件,您需要使用那里的名称导入它们:

从 './App.jsx' 导入 {Home,About,Contact};

导入默认组件:

从 './App.jsx' 导入应用程序;

import React from 'react';
import {Link} 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;



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



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


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

import React from 'react';
import ReactDOM from 'react-dom';
import {Router, Route, browserHistory, IndexRoute} from 'react-router';
import App from './App.jsx';
import {Home,About,Contact} from './App.jsx';

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

	
), document.getElementById('app'));

不要使用名称组件(Home、About、Contact)导入默认组件(App 组件)。如果您使用命名组件导入它们,它们将无法正确呈现。

块引用

【讨论】:

【解决方案2】:

import React from 'react';
import {Link} 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;



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



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


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

【讨论】:

    【解决方案3】:

    你只有一行代码:

    export default App;

    在其他几行之后你有代码:

    export default Home;

    这就是问题所在!你在一个文件中使用了export default 2 次。您必须更改其中之一才能解决问题。

    “你不能在一个文件中多次使用export default”。

    【讨论】:

      【解决方案4】:

      在一行中导出所有组件

      export default {App, Home, Contacts, About};
      

      【讨论】:

        【解决方案5】:

        Export Default Home 用于公开任何模块以在其他文件中使用,但只有一个组件是默认的而不是全部。一个模块只能导出一次。您正在使用相同的语句来导出每个不必要的组件。

        使用此语句导入组件

        import {Home,About,Contact} from './App.jsx';

        【讨论】:

          【解决方案6】:

          您需要删除 AppHome 类中的 default 关键字,如下所示:

          export App;
          export Home;
          

          default 关键字仅在您要导出 ONE 类时使用。

          【讨论】:

            猜你喜欢
            • 2017-05-11
            • 1970-01-01
            • 2017-01-02
            • 2021-04-24
            • 1970-01-01
            • 1970-01-01
            • 2019-11-22
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多