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.