Bileşenleri İçe ve Dışa Aktarma
Bileşenlerin büyüsü yeniden kullanılabilirliklerinde yatar: diğer bileşenlerden oluşan bileşenler oluşturabilirsiniz. Ancak, giderek daha fazla bileşeni iç içe yerleştirdikçe, bunları farklı dosyalara bölmeye başlamak genellikle mantıklıdır. Bu, dosyalarınızın kolayca taranmasını ve bileşenlerin daha fazla yerde yeniden kullanılmasını sağlar.
Bunları öğreneceksiniz
- Kök bileşen dosyası nedir
- Bir bileşeni içe ve dışa aktarma
- Varsayılan ve adlandırılmış içe ve dışa aktarmaların ne zaman kullanılması gerektiği
- Bir dosyadan birden fazla bileşen içe ve dışa nasıl aktarılır
- Bileşenler birden fazla dosyaya nasıl bölünür
Kök bileşen dosyası
İlk bileşeniniz’de, Profile
bileşenini render eden bir Gallery
bileşeni oluşturmuştunuz:
function Profile() { return ( <img src="https://i.imgur.com/MK3eW3As.jpg" alt="Katherine Johnson" /> ); } export default function Gallery() { return ( <section> <h1>Muhteşem bilim insanları</h1> <Profile /> <Profile /> <Profile /> </section> ); }
Bu örnekte, bileşenler App.js
adlı bir kök bileşen dosyası’nın içerisinde barınmaktadır. Create React App’de uygulamanız src/App.js
dosyası içinde barınmaktadır. Fakat kurulumunuza bağlı olarak kök bileşeniniz başka bir dosyanın içerisinde olabilir. Eğer dosya tabanlı yönlendirmesi olan bir çatı kullanıyorsanız, kök bileşeniniz her sayfa için ayrı olacaktır.
Bileşenleri içe ve dışa aktarma
Bu örnekte bileşenler App.js
adlı bir kök bileşen dosyasında bulunmaktadır. Kurulumunuza bağlı olarak, kök bileşeniniz (root component) başka bir dosyada olabilir. Next.js gibi dosya tabanlı yönlendirmeye sahip bir çatı (framework) kullanıyorsanız, kök bileşeniniz her sayfa için farklı olacaktır.
Eğer açılış ekranını değiştirmek ve bilim kitaplarının bir listesini koymak isterseniz ne olur? Veya tüm profilleri başka bir yere yerleştirmek isterseniz? Bu durumda Galeri
ve Profil
bileşenlerini kök bileşen dosyasından çıkarmak mantıklıdır. Bu, onların daha modüler olmasını ve diğer dosyalarda yeniden kullanılabilir olmasını sağlayacaktır. Bir bileşeni üç adımda taşıyabilirsiniz:
- Yeni bir JS dosyası oluşturunuz ve bileşeni bunun içine koyunuz.
- Dışa aktarma işlemini bu dosya içerisindeki fonksiyon bileşenine uygulayınız (varsayılan olarak yada adlandırılmış olarak dışa aktarım).
- İçe aktarma işlemini bu bileşeni kullanmak istediğiniz dosyada yapınız (varsayılan yada adlandırılmış dışa akratıma uygun olacak içe aktarımı kullanarak).
Burada Profile
ve Gallery
bileşenleri App.js
dosyası dışına Gallery.js
adlı bir dosyaya taşınmıştır. Şimdi App.js
dosyasını Gallery.js
dosyasından Gallery
bileşenini içe aktaracak şekilde düzenleyebilirsiniz:
import Gallery from './Gallery.js'; export default function App() { return ( <Gallery /> ); }
Bu örneğin iki farklı bileşen dosyasına nasıl ayrıldığına dikkat ediniz:
Gallery.js
:- Sadece aynı dosya içerisinde kullanılan ve dışa aktarılmayan
Profile
bileşenini tanımlar. - Varsayılan dışa aktarma olarak
Gallery
bileşenini dışa aktarır.
- Sadece aynı dosya içerisinde kullanılan ve dışa aktarılmayan
App.js
:Gallery.js
dosyasından varsayılan içe aktarma olarakGallery
bileşenini içe aktarır.- Varsayılan dışa aktarma olarak
App
bileşenini dışa aktarır.
Derinlemesine İnceleme
Javascript’de değerleri dışa aktarmak için başlıca iki yol vardır: varsayılan dışa aktarmalar ve adlandırılmış dışa aktarmalar. Şimdiye kadar, örneklerimizde sadece varsayılan dışa aktarmalar kullanılmıştır. Fakat siz birini yada ikisini birlikte aynı dosyada kullanabilirsiniz. Bir dosyada birden fazla varsayılan dışa aktarma olamaz, ama dilediğiniz kadar adlandırılmış dışa aktarma olabilir.
Bileşenlerinizi nasıl dışa aktardığınız nasıl içe aktarmanız gerektiğini belirler. Eğer varsayılan bir dışa aktarmayı, adlandırılmış bir dışa aktarma ile aynı şekilde içe aktarmaya çalışırsanız hata alırsınız! Bu tablo takip etmenize yardımcı olabilir:
Sözdizimi | Dışa aktarma ifadesi | İçe aktarma ifadesi |
---|---|---|
Varsayılan | export default function Button() {} | import Button from './Button.js'; |
Adlandırılmış | export function Button() {} | import { Button } from './Button.js'; |
Bir içe aktarma yazarken import
sonrasında istediğiniz adı kullanabilirsiniz. Örneğin, import Zurna from './Button.js'
şeklinde yazabilirsiniz ve bu size yine aynı varsayılan dışa aktarmayı sağlayacaktır. Buna karşılık, adlandırılmış içe aktarmalarda, ad iki tarafta da aynı olmak zorundadır. Bu sebeple bunlara adlandırılmış içe aktarmalar denir!
Geliştiriciler eğer dosya tek bir bileşeni dışa aktarıyorsa genellikle varsayılan dışa aktarmayı, birden fazla bileşen ve değeri dışa aktarıyorsa adlandırılmış dışa aktarmayı kullanmaktadır. Hangi kodlama stilini tercih ettiğinizden bağımsız olarak, bileşen fonksiyonlarınıza ve bulundukları dosyalara anlamlı adlar veriniz. Hata ayıklamayı zorlaştırdıkları için, export default () => {}
gibi adsız bileşenlerin kullanımı önerilmez.
Aynı dosya içerisinden birden fazla bileşenin içe ve dışa aktarımı
Eğer bir galeri yerine sadece bir Profile
göstermek isterseniz ne olur? Profile
bileşenini de dışa aktarabilirsiniz. Ancak Gallery.js
dosyası zaten bir varsayılan dışa aktarmaya sahiptir ve iki varsayılan dışa aktarmaya sahip olamaz. Varsayılan aktarmayla yeni bir dosya oluşturabilirsiniz yada Profile
için adlandırılmış dışa aktarma ekleyebilirsiniz. Bir dosya sadece bir adet varsayılan dışa aktarmaya sahip olabilir, ancak birçok adlandırılmış dışa aktarmaya sahip olabilir!
İlk olarak, adlandırılmış dışa aktarma kullanarak Gallery.js
’den Profile
’ı dışa aktarınız (default
anahtar kelimesi olmadan):
export function Profile() {
// ...
}
Sonrasında, adlandırılmış içe aktarma kullanarak Gallery.js
’den Profile
’ı App.js
’de içe aktarınız (süslü parantezleri kullanarak):
import { Profile } from './Gallery.js';
Son olarak, App
bileşeninde <Profile />
’ı render ediniz:
export default function App() {
return <Profile />;
}
Şu anda Gallery.js
dosyası iki adet dışa aktarma içermektedir: bir varsayılan Gallery
dışa aktarma, ve bir adlandırılmış Profile
dışa aktarma. App.js
dosyası her ikisini de içe aktarmaktadır. Bu örnekte <Profile />
bileşenini <Gallery />
olarak düzenlemeyi ve geri almayı deneyin:
import Gallery from './Gallery.js'; import { Profile } from './Gallery.js'; export default function App() { return ( <Profile /> ); }
Artık varsayılan ve adlandırılmış dışa aktarmaları bir arada kullanıyorsunuz:
Gallery.js
:Profile
bileşenini adlandırılmış dışa aktarma olarakProfile
adıyla dışa aktarır.Gallery
bileşenini varsayılan dışa aktarma olarak dışa aktarır.
App.js
:Profile
’ıGallery.js
’den adlandırılmış içe aktarma olarakProfile
adıyla dışa aktarır.Gallery
’iGallery.js
’den varsayılan içe aktarma olarak içe aktarır.- Kök
App
bileşenini varsayılan dışa aktarma olarak dışa aktarır.
Özet
Bu sayfada öğrendikleriniz:
- Kök bileşeni nedir
- Bir bileşen içe ve dışa nasıl aktarılır
- Varsayılan ve adlandırılmış içe ve dışa aktarmalar ne zaman ve nasıl kullanılmalıdır
- Aynı dosya içerisinden birden fazla bileşen nasıl dışarı aktarılabilir
Problem 1 / 1: Bileşenleri daha fazla ayırın
Şu anda Gallery.js, hem Profile
’i hem de Gallery
i dışa aktarıyor, bu biraz kafa karıştıcı.
Profile
bileşenini kendi Profile.js
dosyasına taşıyınız, ve sonrasında App
bileşenini sırasıyla <Profile />
ve <Gallery />
render edecek şekilde değiştiriniz.
Profile
için varsayılan yada adlandırılmış bir dışa aktarma kullanabilirsiniz, ancak hem App.js
hem de Gallery.js
için kullandığınız dışa aktarmaya uygun içe aktarma sözdizimini kullandığınızdan emin olunuz! Yukarıdaki derinlemesine incelemede verilen tablodan yararlanabilirsiniz:
Sözdizimi | Dışa aktarma ifadesi | İçe aktarma ifadesi |
---|---|---|
Varsayılan | export default function Button() {} | import Button from './Button.js'; |
Adlandırılmış | export function Button() {} | import { Button } from './Button.js'; |
// Beni Profile.js'e taşıyınız! export function Profile() { return ( <img src="https://i.imgur.com/QIrZWGIs.jpg" alt="Alan L. Hart" /> ); } export default function Gallery() { return ( <section> <h1>Muhteşem bilim insanları</h1> <Profile /> <Profile /> <Profile /> </section> ); }
Bir dışa aktarma türü ile çalıştırdıktan sonra, diğer dışa aktarma türü ile de çalıştırmayı deneyiniz.