Accueil ne contient pas d'export nommé Accueil

123

Je travaillais avec create-react-appet suis tombé sur ce problème là où je suis Home does not contain an export named Home.

Voici comment configurer mon App.jsfichier:

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;

Maintenant, dans mon layoutsdossier, j'ai le Home.jsfichier. qui est configuré comme suit.

import React, { Component } from 'react';

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

export default Home;

Comme vous pouvez le voir, j'exporte le Homecomposant mais j'obtiens une erreur dans ma console disant cela.

entrez la description de l'image ici

Que se passe-t-il?

Shadid
la source

Réponses:

263

L'erreur vous indique que vous importez de manière incorrecte. Le code que vous avez maintenant:

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

Est incorrect car vous exportez en tant qu'export par défaut et non en tant qu'export nommé. Vérifiez cette ligne:

export default Home;

Vous exportez par défaut , pas sous forme de nom. Ainsi, importez Homecomme ceci:

import Home from './layouts/Home';

Notez qu'il n'y a pas de parenthèses. Lectures complémentaires sur importet export.

Andrew Li
la source
1
Ou vous pouvez également effectuer une exportation nommée. Ex. export {Accueil};
Abhinav Singi
1
@AbhinavSingi Oui, mais c'est une convention et une pratique courante d'exporter un composant comme exportation par défaut d'un module. De plus, il n'y a pas d'autres exportations.
Andrew Li
Oui, exactement @AndrewLi, nous suivons également la même pratique :)
Abhinav Singi
Génial si multiple serait entouré entre accolades par rapport au singulier comme on le voit ici.
TheBlackBenzKid
2
@TheBlackBenzKid Oui, si vous avez plusieurs exportations, utilisez celles nommées. Importez ensuite en utilisant ce nom comme indiqué dans la documentation MDN liée.
Andrew Li
11

Utilisation

import Home from './layouts/Home'

plutôt que

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

Retirer {}de la maison

Shekhar
la source
10
Qu'est-ce que cela ajoute à la réponse existante?
Andrew Li
4

Il s'agit d'un cas où vous avez mélangé les exportations par défaut et les exportations nommées .

Lorsque vous traitez les namedexportations, si vous essayez de les importer, vous devez utiliser des accolades comme ci-dessous,

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

Dans votre cas, la maison a été exportée par défaut. C'est celui qui sera importé du module, lorsque vous ne spécifiez pas un certain nom d'un certain morceau de code. Lorsque vous importez et omettez les accolades, il recherchera l'exportation par défaut dans le module à partir duquel vous importez. Donc, votre importation devrait être,

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

Quelques références à regarder:

premier
la source
1

Je viens de rencontrer ce message d'erreur (après la mise à niveau vers nextjs 9, certaines importations transpilées ont commencé à donner cette erreur). J'ai réussi à les corriger en utilisant une syntaxe comme celle-ci:

import * as Home from './layouts/Home';
Mahdi
la source
1

Nous pouvons également utiliser

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

en utilisant le mot-clé d'exportation avant le mot-clé de classe.

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

Par défaut

 import Home from './layouts/Home'; 

Classe d'exportation par défaut

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

Les deux cas n'ont pas besoin d'écrire

export default Home;

après les cours.

Alimon Karim
la source
0

Vous pouvez utiliser deux façons de résoudre ce problème, la première manière que je pense que la meilleure façon est de remplacer l'importation du segment de votre code par celui ci-dessous:

import Home from './layouts/Home'

ou exportez votre composant sans défaut qui s'appelle exportation nommée comme ceci

import React, { Component } from 'react';

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

export {Home};
Ehsan Ahmadi
la source
0

Voici la solution:

  • Accédez à votre fichier Home.js
  • Assurez-vous d'exporter votre fichier comme ceci à la fin du fichier:
export default Home;
igal neeman
la source
Cela ne semble pas être une bonne réponse et devrait probablement être critiqué. Veuillez lire Comment répondre avant de publier une autre réponse. En général, vous ne devriez pas non plus répondre aux anciennes questions avec beaucoup d'autres réponses - à moins que vous ne puissiez ajouter quelque chose de nouveau, les autres réponses ne le peuvent pas. Incluez également le code.
finnmglas