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?

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.


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


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:


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

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.


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

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;

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.