【问题标题】:Home does not contain an export named HomeHome 不包含名为 Home 的导出
【发布时间】:2017-10-25 15:28:36
【问题描述】:

我在使用 create-react-app 时遇到了一个错误:

Home 不包含名为 Home 的导出。

以下是我设置 App.js 文件的方法:

import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
import { Home } from './layouts/Home'

class App extends Component {
  render() {
    return (
      <div className="App">
        Hello
        <Home />
      </div>
    )
  }
}

export default App;

现在我的layouts 文件夹中有Home.js 文件,其设置如下:

import React, { Component } from 'react';

class Home extends Component {
  render() {
    return (
      <p className="App-intro">
        Hello Man
      </p>
    )
  }
}

export default Home;

如您所见,我正在导出Home 组件。但我在控制台中收到错误消息:

发生了什么事?

【问题讨论】:

    标签: javascript reactjs ecmascript-6 create-react-app


    【解决方案1】:

    错误是告诉您导入不正确。这是您必须添加的代码:

    import { Home } from './layouts/Home';
    

    这是不正确的,因为您正在导出为默认导出,而不是命名导出。检查这一行:

    export default Home;
    

    您将导出为默认值,而不是作为名称。因此,像这样导入Home

    import Home from './layouts/Home';
    

    注意没有大括号。进一步阅读importexport

    【讨论】:

    • 或者您也可以进行命名导出。前任。导出{首页};
    • @AbhinavSingi 是的,但是将组件导出为模块的默认导出是惯例和广泛实践。此外,没有其他出口。
    • 是的,正是@AndrewLi,我们也遵循相同的做法:)
    • 太棒了,与这里看到的单数相比,多个将被包裹在大括号中。
    • @TheBlackBenzKid 是的,如果您有多个导出,请使用命名的。然后使用链接的 MDN 文档中看到的该名称导入。
    【解决方案2】:

    使用

    import Home from './layouts/Home'
    

    而不是

    import { Home } from './layouts/Home'
    

    从主页中删除 {}

    【讨论】:

    • 这对现有答案还有什么作用?
    【解决方案3】:

    这是您混淆了默认导出和命名导出的情况。

    在处理named 导出时,如果您尝试导入它们,您应该使用如下花括号,

    import { Home } from './layouts/Home'; // if the Home is a named export
    

    在您的情况下,主页已导出为默认主页。当您没有指定某段代码的某个名称时,这将从模块中导入。当您导入并省略花括号时,它将在您导入的模块中查找默认导出。所以你的导入应该是,

    import Home from './layouts/Home'; // if the Home is a default export
    

    一些参考看看:

    【讨论】:

      【解决方案4】:

      我刚刚遇到此错误消息(升级到 nextjs 9 后,一些转译的导入开始出现此错误)。我设法使用如下语法修复它们:

      import * as Home from './layouts/Home';
      

      【讨论】:

        【解决方案5】:

        我们也可以使用

        import { Home } from './layouts/Home'; 
        

        在 class 关键字之前使用 export 关键字。

        export class Home extends React.Component{
            render(){
                ........
            }
        }
        

        默认

         import Home from './layouts/Home'; 
        

        默认导出类

         export default class Home extends React.Component{
            render(){
                ........
            }
         }
        

        两种情况都不需要写

        export default Home;
        

        课后

        【讨论】:

          【解决方案6】:

          export { Home }; 放在 Home.js 文件的末尾

          【讨论】:

          • 在问题中说明他做了?
          【解决方案7】:

          您可以使用两种方法来解决此问题,第一种方法是我认为最好的方法是将您的代码的导入段替换为下面的:

          import Home from './layouts/Home'
          

          或者在没有默认值的情况下导出你的组件,这就是所谓的命名导出

          import React, { Component } from 'react';
          
          class Home extends Component{
              render(){
                  return(
                  <p className="App-intro">
                    Hello Man
                  </p>
                  )
              }
          } 
          
          export {Home};
          

          【讨论】:

            【解决方案8】:

            这是解决方案:

            • 转到您的文件 Home.js
            • 确保在文件末尾这样导出文件:
            export default Home;
            

            【讨论】:

            • 这似乎不是一个好的答案,可能应该被否决。在发布另一个答案之前,请阅读How to answer。通常,您也不应该用许多其他答案来回答旧问题——除非您可以添加其他答案无法添加的新内容。还包括代码。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-02-23
            • 1970-01-01
            • 2018-11-17
            • 1970-01-01
            • 1970-01-01
            • 2017-07-10
            相关资源
            最近更新 更多