Home non contiene un'esportazione denominata Home


123

Stavo lavorando create-react-appe mi sono imbattuto in questo problema in cui ottengo Home does not contain an export named Home.

Ecco come imposto il mio App.jsfile:

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;

Ora nella mia layoutscartella ho il Home.jsfile. che è impostato come segue.

import React, { Component } from 'react';

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

export default Home;

Come puoi vedere, sto esportando il Homecomponente ma ricevo un errore nella mia console che lo dice.

inserisci qui la descrizione dell'immagine

Cosa sta succedendo?

Risposte:


263

L'errore ti dice che stai importando in modo errato. Il codice che hai ora:

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

Non è corretto perché stai esportando come esportazione predefinita, non come esportazione con nome. Controlla questa riga:

export default Home;

Stai esportando come impostazione predefinita , non come nome. Quindi, importa in Homequesto modo:

import Home from './layouts/Home';

Notare che non ci sono parentesi graffe. Ulteriori letture su importe export.


1
Oppure puoi anche eseguire un'esportazione con nome. Ex. esporta {Home};
Abhinav Singi

1
@AbhinavSingi Sì, ma è una convenzione e ampiamente praticata esportare un componente come esportazione predefinita di un modulo. Inoltre non ci sono altre esportazioni.
Andrew Li

Sì, esattamente @AndrewLi, seguiamo anche la stessa pratica :)
Abhinav Singi

Fantastico così multiplo sarebbe racchiuso tra parentesi graffe rispetto al singolare come visto qui.
TheBlackBenzKid

2
@TheBlackBenzKid Sì, se hai più esportazioni, usa quelle con nome. Quindi importa utilizzando quel nome come mostrato nella documentazione MDN collegata.
Andrew Li

11

Uso

import Home from './layouts/Home'

piuttosto che

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

Rimuovi {}da Home


10
Cos'altro aggiunge questo alla risposta esistente?
Andrew Li

4

Questo è un caso in cui hai mescolato esportazioni predefinite ed esportazioni con nome .

Quando si tratta delle namedesportazioni, se si tenta di importarle è necessario utilizzare le parentesi graffe come di seguito,

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

Nel tuo caso la Home è stata esportata come predefinita. Questo è quello che verrà importato dal modulo, quando non specifichi un certo nome di un certo pezzo di codice. Quando importi e ometti le parentesi graffe, cercherà l'esportazione predefinita nel modulo da cui stai importando. Quindi la tua importazione dovrebbe essere,

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

Alcuni riferimenti da guardare:


1

Mi sono appena imbattuto in questo messaggio di errore (dopo l'aggiornamento a nextjs 9 alcune importazioni transpilate hanno iniziato a dare questo errore). Sono riuscito a risolverli usando una sintassi come questa:

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

1

Possiamo anche usare

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

utilizzando la parola chiave di esportazione prima della parola chiave della classe.

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

Per impostazione predefinita

 import Home from './layouts/Home'; 

Classe di esportazione predefinita

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

Entrambi i casi non hanno bisogno di scrivere

export default Home;

dopo la lezione.


0

Puoi utilizzare due modi per risolvere questo problema, il primo che lo ritengo il modo migliore è sostituire il segmento di importazione del tuo codice con quello seguente:

import Home from './layouts/Home'

o esporta il tuo componente senza impostazione predefinita che si chiama export denominato in questo modo

import React, { Component } from 'react';

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

export {Home};

0

Questa è la soluzione:

  • Vai al tuo file Home.js
  • Assicurati di esportare il file in questo modo alla fine del file:
export default Home;

Questa non sembra una buona risposta e probabilmente dovrebbe essere sottovalutata. Si prega di leggere Come rispondere prima di pubblicare un'altra risposta. In generale, non dovresti nemmeno rispondere a vecchie domande con molte altre risposte, a meno che tu non possa aggiungere qualcosa di nuovo che le altre risposte non possono. Includere anche il codice.
finnmglas
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.