Bileşenler, React’in ana konseptlerinden biridir. Bileşenler, kullanıcı arayüzlerini (UI) üzerine inşa ettiğiniz temeldir ve bu da onları React yolculuğunuza başlamak için mükemmel bir yer haline getirir!

Bunları öğreneceksiniz

  • Bileşen nedir
  • React uygulamalarında bileşenler hangi rolü oynar
  • İlk React bileşeninizi nasıl yazarsınız

Bileşenler: Kullanıcı arayüzü yapı taşları

Web’de HTML, yerleşik <h1> ve <li> gibi elemanlar ile zengin yapılandırılmış belgeler oluşturmanıza olanak tanır:

<article>
<h1>İlk Bileşenim</h1>
<ol>
<li>Bileşenler: Kullanıcı arayüzü yapı taşları</li>
<li>Bileşeni tanımlama</li>
<li>Bileşeni kullanma</li>
</ol>
</article>

Bu biçimlendirme(markup), makaleyi <article>, başlığını <h1> ve sıralı bir liste <ol> halinde (kısaltılmış) içindekiler tablosunu temsil eder. Stil için CSS ve etkileşim için JavaScript ile birleştirilen bu tür biçimlendirme, Web’de gördüğünüz her kullanıcı arayüzü parçasında, her kenar çubuğunda, avatarda, modal’da ve açılır menünün arkasında bulunur.

React, biçimlendirmenizi, CSS’i ve JavaScript’inizi uygulamanız için tekrar kullanabilir kullanıcı arayüzü elemanları olarak kişisel bir “bileşende” toplamanızı sağlar. Yukarıda gördüğünüz içindekiler tablosu kodunu, her sayfada render edilebilecek şekilde bir <TableOfContents /> bileşenine dönüştürebilirsiniz. Bu bileşen arka planda hala aynı <article> ve <h1> gibi HTML elemanlarını kullanmaktadır.

HTML elemanlarında olduğu gibi, bütün bir sayfayı tasarlamak için bileşenleri oluşturabilir, sıralayabilir ve iç içe yerleştirebilirsiniz. Örneğin, şu anda okumakta olduğunuz dökümantasyon sayfası React bileşenleri ile yapılmıştır.

<PageLayout>
<NavigationHeader>
<SearchBar />
<Link to="/docs">Dökümantasyon</Link>
</NavigationHeader>
<Sidebar />
<PageContent>
<TableOfContents />
<DocumentationText />
</PageContent>
</PageLayout>

Projeniz büyüdükçe, yaptığınız dizaynların pek çoğunun, geliştirme aşamasını hızlandıracak şekilde zaten yazmış olduğunuz bileşenleri yeniden kullanarak oluşturabileceğini fark edeceksiniz. Yukarıdaki içindekiler tablosu herhangi bir ekrana <TableOfContents /> bileşeni ile eklenilebilir! Hatta React açık kaynak topluluğu tarafından paylaşılan Chakra UI ve Material UI gibi binlerce bileşenle projenize hızlı bir başlangıç yapabilirsiniz.

Bileşeni tanımlama

Geleneksel olarak web sayfaları oluşturulurken, web geliştiricileri içeriklerini tanımladılar ve ardından biraz JavaScript serpiştirerek sayfaları etkileşimli hale getirdiler. Web’de etikeleşimin olsa da olur olmasa da olduğu zamanlarda bu harika bir yaklaşımdı. Ancak şimdi etkileşim birçok site ve tüm uygulamalar için beklenmektedir. React, hala aynı teknolojiyi kullanırken etkileşimi ön sıraya koyar: React bileşeni, biçimlendirme serpiştirebileceğiniz bir JavaScript fonksiyonudur. Aşağıdaki örnekte nasıl olduğunu görelim (aşağıdaki örneği düzenleyebilirsiniz):

export default function Profile() {
  return (
    <img
      src="https://i.imgur.com/MK3eW3Am.jpg"
      alt="Katherine Johnson"
    />
  )
}

Ve işte bir bileşenin nasıl oluşturulacağı:

Adım 1: Bileşeni dışa aktar

export default ön adı standart bir JavaScript sözdizimidir (React’e özel değildir). Bir dosyadaki ana fonksiyonu işaretlemenize izin vererek o fonksiyonu başka dosyalarda içe aktarmanızı sağlar. (İçe aktarmak hakkında daha fazla bilgi için Bileşenleri İçe ve Dışa Aktarma!)

Adım 2: Fonksiyonu tanımlama

function Profile() { } ile Profile adında bir JavaScript fonksiyonu tanımlarsınız.

Tuzak

React bileşenleri sıradan JavaScript fonksiyonlarıdır ama bu bileşenlerin isimleri büyük harfle başlamak zorundadır, aksi halde çalışmayacaklardır!

Adım 3: Biçimlendirme ekle(markup)

Bu bileşen src ve alt özelliklerine sahip bir <img /> elemanı döndürmektedir. <img /> elemanı HTML gibi yazılmıştır ama aslında arka planda JavaScript’tir! Bu sözdizimine JSX denir ve biçimlendirmeyi JavaScript’in içine yerleştirmenize olanak tanır.

Bileşenin ne döndüreceği aşağıdaki bileşende olduğu gibi tek bir satır halinde yazılabilir:

return <img src="https://i.imgur.com/MK3eW3As.jpg" alt="Katherine Johnson" />;

Ancak biçimlendirmenizin hepsi return kelimesi ile aynı satırda değilse, biçimlendirmenizin parantez içine almak zorundasınız:

return (
<div>
<img src="https://i.imgur.com/MK3eW3As.jpg" alt="Katherine Johnson" />
</div>
);

Tuzak

Eğer parantez içine almayı unutursanız, return kelimesinden sonraki her kod görmezden gelinecektir!

Bileşeni kullanma

Artık Profile bileşenini tanımladığınıza göre, bu bileşeni başka bileşenler içine koyabilirsiniz. Örneğin, birden fazla Profile bileşeni kullanan bir Gallery bileşeni oluşturabilirsiniz:

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

Tarayıcı ne görür

Baş harflerdeki farklılığa dikkat edin:

  • <section> küçük harfle başlıyor, bu yüzden React, bunun bir HTML elemanı olduğu bilir.
  • <Profile /> bileşeni büyük P harfi ile başlıyor, bu yüzden React, Profile isimli bileşeni kullanmak istediğimizi bilir.

Hatta Profile bileşeni daha da fazla HTML içermektedir:: <img />. Sonuçta tarayıcı şunu görür:

<section>
<h1>Muhteşem bilim insanları</h1>
<img src="https://i.imgur.com/MK3eW3As.jpg" alt="Katherine Johnson" />
<img src="https://i.imgur.com/MK3eW3As.jpg" alt="Katherine Johnson" />
<img src="https://i.imgur.com/MK3eW3As.jpg" alt="Katherine Johnson" />
</section>

Bileşenleri iç içe koymak ve düzenlemek

Bileşenler sıradan JavaScript fonksiyonlarıdır, yani birden fazla bileşeni aynı dosya içinde tutabilirsiniz. Bileşenlerin görece küçük ve birbirleriyle ilişkili olduğu durumlarda bunu yapmak kullanışlıdır. Eğer dosya kalabalık bir hale gelirse, Profile bileşeneni ayrı başka bir dosyaya taşıyabilirsiniz. Bunun nasıl yapılacağını kısa süre içinde içe ve dışa aktarmakla alakalı sayfada öğreneceksiniz.

Profile bileşenleri Gallery bileşeni içinde render edildiğinden—hatta birden fazla kere!—Gallery bileşeninin üst bileşen olduğunu ve her Profile bileşeninin “alt bileşen” olduğunu söyleyebiliriz. Bu React’in büyüsünün bir parçasıdır: bir bileşeni bir kere tanımlayabilirsiniz ve daha sonra bu bileşeni istediğiniz kadar ve istediğiniz yerde kullanabilirsiniz.

Tuzak

Bileşenler başka bileşenleri render edebilirler ama bileşenlerin tanımlarını asla iç içe koymamalısınız:

export default function Gallery() {
// 🔴 Asla bir bileşen içinde başka bileşen tanumlamayın!
function Profile() {
// ...
}
// ...
}

Yukarıdaki kod parçası çok yavaştır ve hatalara neden olur. Bunun yerine, her bileşeni üst seviyede tanımlayın:

export default function Gallery() {
// ...
}

// ✅ Bileşeni üst seviyede bildirin
function Profile() {
// ...
}

Alt bileşen, üst bileşenden gelecek bir veriye ihtiyaç duyduğunda, tanımlamaları iç içe yapmak yerine prop olarak iletin.

Derinlemesine İnceleme

Baştan aşağı bileşenler

React uygulamanız “kök” bileşeninde başlar. Bu bileşen genel olarak yeni bir proje başlattığınızda otomatik olarak oluşturulur. Örneğin, CodeSandbox ya da Next.js çatısını kullanırsanız, kök bileşeni pages/index.js sayfasında tanımlanmıştır. Bu örneklerde, kök bileşenlerini dışa aktarıyoruz.

Çoğu React uygulaması baştan aşağı bileşenleri kullanır. Bu, bileşenleri yalnızca butonlar gibi yeniden kullanılabilir parçalar için değil, aynı zamanda kenar çubukları, listeler ve hatta sayfanın bütünü için de kullanabileceğiniz anlamına gelir! Bileşenler, bazıları yalnızca bir defa kullanılsa bile kullanıcı arayüzü kodunu ve biçimlendirmeyi düzenlemenin kullanışlı bir yoludur.

React tabanlı çatılar bunu bir adım ileri götürürler. Boş bir HTML sayfası kullanmak ve React’in sayfayı JavaScript ile kontrol etmesine “izin vermek” yerine, bu çatılar aynı zamanda React bileşenlerinizden otomatik olarak HTML üretirler. Bu, JavaScript kodu yüklenmeden önce bazı içerikleri kullanıcıya göstermenize izin verir.

Yine de pek çok site, React’i sadece halihazırda olan HTML sayfalarına etkileşim eklemek için kullanır. Sayfanın tamamı için tek bir tane yerine birçok kök bileşeni vardır. İhtiyacınız olan kadar çok veya az React kullanabilirsiniz.

Özet

Az önce React’in tadını ilk kez aldınız! Bazı önemli noktaların üzerinden tekrar geçelim.

  • React, uygulamanız için tekrar kullanabilir kullanıcı arayüzü elemanları yaratmanızı sağlar.

  • Bir React uygulamasında her kullanıcı arayüzü parçası bir bileşendir.

  • React bileşenleri şunların dışında sıradan JavaScript fonksiyonlarıdır:

    1. İsimleri her zaman büyük harfle başlar.
    2. Bu bileşenler JSX biçimlendirmesi döndürür.

Problem 1 / 4:
Bileşeni dışa aktarma

Bu sandbox çalışmamaktadır çünkü kök bileşeni dışarı aktarılmamıştır:

function Profile() {
  return (
    <img
      src="https://i.imgur.com/lICfvbD.jpg"
      alt="Aklilu Lemma"
    />
  );
}

Çözüme bakmadan önce kendiniz çözmeye çalışın!