Ana Sayfa, Ana adlı bir dışa aktarma içermiyor


123

Çalışıyordum create-react-appve bu konuyla karşılaştığım yerde karşılaştım Home does not contain an export named Home.

Dosyamı şu şekilde oluşturuyorum App.js:

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;

Şimdi layoutsklasörümde Home.jsdosya var. aşağıdaki gibi bir kurulum.

import React, { Component } from 'react';

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

export default Home;

Gördüğünüz gibi Homebileşeni dışa aktarıyorum ancak konsolumda bunu söyleyen bir hata alıyorum.

görüntü açıklamasını buraya girin

Ne oluyor?

Yanıtlar:


263

Hata, size yanlış bir şekilde içe aktarma yaptığınızı söylüyor. Şimdi sahip olduğunuz kod:

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

Hatalı, çünkü adlandırılmış bir dışa aktarma olarak değil, varsayılan dışa aktarma olarak dışa aktarıyorsunuz. Bu satırı kontrol edin:

export default Home;

Bir ad olarak değil, varsayılan olarak dışa aktarıyorsunuz . Bu nedenle, şu şekilde içe aktarın Home:

import Home from './layouts/Home';

Küme parantezlerinin olmadığına dikkat edin. Üzerinde fazla okuma importve export.


1
Veya adlandırılmış bir dışa aktarma da yapabilirsiniz. Ör. dışa aktar {Ana Sayfa};
Abhinav Singi

1
@AbhinavSingi Evet, ancak bir modülün varsayılan dışa aktarımı olarak bir bileşeni dışa aktarmak gelenekseldir ve yaygın olarak uygulanmaktadır. Ayrıca başka ihracat da yok.
Andrew Li

Evet, aynen @AndrewLi, biz de aynı uygulamayı takip ediyoruz :)
Abhinav Singi

Harika, burada görüldüğü gibi tekil ile karşılaştırıldığında küme parantezlerine sarılır.
TheBlackBenzKid

2
@TheBlackBenzKid Evet, birden fazla dışa aktarmanız varsa, adlandırılmış olanları kullanın. Ardından, bağlantılı MDN belgelerinde görüldüğü gibi bu adı kullanarak içe aktarın.
Andrew Li

11

kullanım

import Home from './layouts/Home'

ziyade

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

{}Ana Sayfadan Kaldır


10
Bu, mevcut yanıta başka ne ekler?
Andrew Li

4

Bu, varsayılan dışa aktarmalarla adlandırılmış dışa aktarmaları karıştırdığınız bir durumdur .

Dışa namedaktarımlarla uğraşırken , bunları içe aktarmaya çalışırsanız aşağıdaki gibi küme parantezi kullanmalısınız,

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

Sizin durumunuzda, Ana Sayfa varsayılan olarak dışa aktarıldı. Bu, belirli bir kod parçasının belirli bir adını belirtmediğinizde modülden alınacak olanıdır. Küme parantezlerini içe aktardığınızda ve atladığınızda, içe aktardığınız modülde varsayılan dışa aktarmayı arayacaktır. Yani ithalatınız,

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

Bakılacak bazı referanslar:


1

Bu hata mesajıyla karşılaştım (nextjs 9'a yükselttikten sonra bazı aktarılmış içe aktarmalar bu hatayı vermeye başladı). Bunları şu sözdizimini kullanarak düzeltmeyi başardım:

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

1

Ayrıca kullanabiliriz

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

ihracat anahtar sözcüğünü sınıf anahtar sözcüğünden önce kullanma.

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

Varsayılan olarak

 import Home from './layouts/Home'; 

Varsayılan ihracat sınıfı

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

Her iki durumda da yazmaya gerek yok

export default Home;

dersten sonra.


0

Bu sorunu çözmek için iki yol kullanabilirsiniz; bence en iyi yol, kodunuzun içe aktarım bölümünü aşağıdaki bir bölümle değiştirmektir:

import Home from './layouts/Home'

veya bileşeninizi varsayılan olmadan dışa aktarın, buna adlandırılmış dışa aktarma adı verilir

import React, { Component } from 'react';

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

export {Home};

0

Çözüm şudur:

  • Home.js dosyanıza gidin
  • Dosyanızı dosyanın sonunda şu şekilde dışa aktardığınızdan emin olun:
export default Home;

Bu iyi bir cevap gibi görünmüyor ve muhtemelen reddedilmesi gerekiyor. Lütfen başka bir cevap göndermeden önce Nasıl cevaplanır bölümünü okuyun Genel olarak, diğer cevapların yapamayacağı yeni bir şey ekleyemediğiniz sürece, eski soruları başka cevaplarla da cevaplamamalısınız. Ayrıca kodu da ekleyin.
finnmglas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.