Página inicial não contém uma exportação denominada Página inicial

123

Eu estava trabalhando create-react-appe me deparei com esse problema de ondeHome does not contain an export named Home .

Aqui está como eu configuro meu App.jsarquivo:

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;

Agora na minha layoutspasta eu tenho o Home.jsarquivo. que é configurado como a seguir.

import React, { Component } from 'react';

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

export default Home;

Como você pode ver, estou exportando o Homecomponente, mas recebo um erro no meu console dizendo isso.

insira a descrição da imagem aqui

O que está acontecendo?

Shadid
fonte

Respostas:

263

O erro está dizendo que você está importando incorretamente. O código que você tem agora:

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

Está incorreto porque você está exportando como a exportação padrão, não como uma exportação nomeada. Verifique esta linha:

export default Home;

Você está exportando como padrão , não como um nome. Assim, importe Homeassim:

import Home from './layouts/Home';

Observe que não há colchetes. Outras leituras sobre importe export.

Andrew Li
fonte
1
Ou você também pode fazer uma exportação nomeada. Ex. exportar {Home};
Abhinav Singi
1
@AbhinavSingi Sim, mas é comum e amplamente praticado exportar um componente como a exportação padrão de um módulo. Além disso, não há outras exportações.
Andrew Li
Sim, exatamente @AndrewLi, também segue a mesma prática :)
Abhinav Singi
Impressionante, o múltiplo seria envolto em colchetes em comparação com o singular, como visto aqui.
TheBlackBenzKid
2
@TheBlackBenzKid Sim, se você tiver várias exportações, use as nomeadas. Em seguida, importe usando esse nome, como visto na documentação do MDN vinculada.
Andrew Li
11

Usar

import Home from './layouts/Home'

ao invés de

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

Remover {}da página inicial

Shekhar
fonte
10
O que mais isso adiciona à resposta existente?
Andrew Li
4

Este é um caso em que você misturou exportações padrão e nomeou exportações .

Ao lidar com as namedexportações, se você tentar importá-las, use chaves como abaixo,

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

No seu caso, a Casa foi exportada como padrão. É o que será importado do módulo, quando você não especificar um determinado nome de um determinado pedaço de código. Quando você importa e omite os chavetas, ele procurará a exportação padrão no módulo do qual está importando. Portanto, sua importação deve ser,

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

Algumas referências a serem visualizadas:

prime
fonte
1

Acabei de receber essa mensagem de erro (após a atualização para o nextjs 9, algumas importações transpiladas começaram a dar esse erro). Consegui corrigi-los usando uma sintaxe como esta:

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

Nós também podemos usar

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

usando exportar palavra-chave antes da palavra-chave da classe.

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

Por padrão

 import Home from './layouts/Home'; 

Classe de exportação padrão

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

Ambos os casos não precisam escrever

export default Home;

depois da aula.

Alimon Karim
fonte
0

Você pode usar duas maneiras de resolver esse problema, a primeira maneira que eu acho que é a melhor maneira de substituir o segmento de importação do seu código pelo seguinte:

import Home from './layouts/Home'

ou exportar seu componente sem padrão, chamado exportação exportada, como este

import React, { Component } from 'react';

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

export {Home};
Ehsan Ahmadi
fonte
0

Esta é a solução:

  • Vá para o seu arquivo Home.js
  • Certifique-se de exportar seu arquivo assim no final do arquivo:
export default Home;
igal neeman
fonte
Isso não parece ser uma boa resposta e provavelmente deve ser votado abaixo. Leia Como responder antes de publicar outra resposta. Geralmente, você também não deve responder perguntas antigas com muitas outras respostas - a menos que possa adicionar algo novo que as outras respostas não possam. Inclua também o código.
finnmglas 20/07