HomeにはHomeという名前のエクスポートが含まれていません


123

私は作業していてcreate-react-app、この問題に遭遇しましたHome does not contain an export named 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コンポーネントをエクスポートしていますが、コンソールにエラーが表示されます。

ここに画像の説明を入力してください

何が起こっている?

回答:


263

エラーは、間違ってインポートしていることを示しています。あなたが今持っているコード:

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

名前付きエクスポートではなく、デフォルトのエクスポートとしてエクスポートしているため、正しくありません。この行を確認してください:

export default Home;

名前としてではなく、デフォルトとしてエクスポートしています。したがって、次のようにインポートしHomeます。

import Home from './layouts/Home';

中括弧がないことに注意してください。上の深い読みimportexport


1
または、名前付きエクスポートを実行することもできます。例 {Home}をエクスポートします。
Abhinav Singi

1
@AbhinavSingiはい、ただし、モジュールのデフォルトのエクスポートとしてコンポーネントをエクスポートすることは慣例であり、広く行われています。さらに、他に輸出品はありません。
Andrew Li

はい、まさに@AndrewLiです。私たちも同じ習慣に従います:)
Abhinav Singi

素晴らしいので、ここで見られるように、複数は単数形と比較して中括弧で囲まれます。
TheBlackBenzKid

2
@TheBlackBenzKidはい、複数のエクスポートがある場合は、名前付きエクスポートを使用します。次に、リンクされたMDNドキュメントにあるように、その名前を使用してインポートします。
Andrew Li

11

使用する

import Home from './layouts/Home'

のではなく

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

{}ホームから削除


10
これは既存の答えに他に何を追加しますか?
Andrew Li

4

これは、デフォルトのエクスポートと名前付きエクスポートを混在させた場合です

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

見るべきいくつかの参照:


1

私はこのエラーメッセージに遭遇しました(nextjs 9にアップグレードした後、いくつかの変換されたインポートがこのエラーを出し始めました)。私は次のような構文を使用してそれらを修正することができました:

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

1

私たちも使用できます

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

クラスキーワードの前にエクスポートキーワードを使用します。

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

デフォルトでは

 import Home from './layouts/Home'; 

デフォルトのエクスポートクラス

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

どちらの場合も書く必要はありません

export default Home;

放課後。


0

この問題を解決するには2つの方法を使用できます。最初の方法は、コードのインポートセグメントを次のセグメントに置き換えることです。

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

0

これが解決策です:

  • ファイルHome.jsに移動します
  • ファイルの最後で、次のようにファイルをエクスポートしてください。
export default Home;

これは良い答えではないようで、おそらく反対票を投じるべきです。別の回答を投稿する前に、回答方法をお読みください。一般的に、他の多くの回答で古い質問に答えるべきではありません-他の回答ではできない新しい何かを追加できない限り。コードも含めます。
finnmglas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.