Props

Props nedir, parent'tan child'a veri gönderme, birden fazla prop, destructuring, varsayılan değerler ve props'un normal fonksiyon parametrelerinden farkı.

Başlangıç 10 dk
EN

Props

Components dersinde Button component'ini üç kez kullanmıştık, ama üçü de birbirinin aynısıydı. Peki her kullanımda farklı bir metin, farklı bir renk göstermek istersek? Bunun cevabı props. Bu ders, bir component'e dışarıdan veri göndermenin yolunu basit örneklerle anlatıyor.

Props Nedir?

Props (properties), bir component'e dışarıdan veri göndermenin yoludur -- tıpkı bir HTML etiketine attribute vermek gibi (JSX dersindeki "Attribute'lar ve className" bölümünü hatırla), ama burada değer, component fonksiyonuna bir parametre olarak ulaşır.

Parent'tan Child'a Veri Göndermek

Bir component'i kullanırken (yani onu "render" ederken), ona attribute gibi değerler verebilirsin -- bunlar, o component'in props'u olur:

// Props (properties), bir component'e DIŞARIDAN veri göndermenin yoludur --
// tıpkı bir HTML etiketine attribute vermek gibi, ama burada değer, senin
// component fonksiyonuna bir parametre olarak ulaşır.
function Greeting(props) {
  return <h1>Merhaba, {props.name}!</h1>;
}

function App() {
  return <Greeting name="Ayşe" />;
}

console.log(App());
// Sonuç: <h1>Merhaba, Ayşe!</h1>

Burada App, Greeting'i kullanan (yani "parent") component; Greeting ise kullanılan (yani "child") component. name="Ayşe" yazarak, Greeting'e name adında bir prop gönderiyoruz.

Birden Fazla Prop Kullanmak

Bir component'e istediğin kadar prop gönderebilirsin:

// Bir component'e istediğin kadar prop gönderebilirsin -- her biri
// props nesnesinin ayrı bir alanı olarak fonksiyona ulaşır.
function UserCard(props) {
  return (
    <div>
      <h2>{props.name}</h2>
      <p>Yaş: {props.age}</p>
      <p>Şehir: {props.city}</p>
    </div>
  );
}

function App() {
  return <UserCard name="Ayşe" age={28} city="İzmir" />;
}

console.log(App());

Her prop, props nesnesinin ayrı bir alanı olarak component'e ulaşır -- props.name, props.age, props.city gibi.

Destructuring ile Props Okumak

Her yerde props.name yazmak yerine, çoğu React kodunda destructuring kullanılır:

// Her yerde "props.name", "props.age" yazmak yerine, çoğu React kodunda
// destructuring kullanılır -- fonksiyon parametresinin içinde, ihtiyacın olan
// alanları doğrudan değişken olarak çıkarırsın. İki örnek de AYNI işi yapar,
// ikincisi yalnızca daha kısa ve daha yaygın kullanılan yazım şekli.

// 1) Destructuring OLMADAN:
function UserCardLong(props) {
  return <p>{props.name} -- {props.age} yaşında</p>;
}

// 2) Destructuring İLE (yaygın kullanılan biçim):
function UserCard({ name, age }) {
  return <p>{name} -- {age} yaşında</p>;
}

console.log(UserCardLong({ name: "Ayşe", age: 28 }));
console.log(UserCard({ name: "Ayşe", age: 28 }));

İki yazım da tamamen aynı işi yapar -- destructuring, yalnızca props. tekrarını ortadan kaldırıp kodu biraz daha kısa yapar. Yaygın kullanılan biçim bu -- ilerleyen derslerde de bunu kullanacağız.

Varsayılan Değerler (Default Props)

Bir prop hiç gönderilmezse ne olur? Destructuring sırasında bir varsayılan değer tanımlayabilirsin:

// Bir prop hiç gönderilmezse ne olsun? Destructuring sırasında bir
// "varsayılan değer" (default value) tanımlayabilirsin -- normal JavaScript
// fonksiyon parametrelerindeki varsayılan değerlerle tamamen aynı fikir.
function Greeting({ name = "Misafir" }) {
  return <h1>Merhaba, {name}!</h1>;
}

console.log(Greeting({ name: "Ayşe" })); // Merhaba, Ayşe!
console.log(Greeting({}));               // Merhaba, Misafir! (varsayılan kullanıldı)

name = "Misafir", normal JavaScript fonksiyon parametrelerindeki varsayılan değerlerle tamamen aynı fikir -- name gönderilmezse, Misafir kullanılır.

Props vs Normal Fonksiyon Parametreleri

Props, aslında sıradan bir fonksiyon parametresinden fazlası değil -- React'in özel bir mekanizması yok burada. Fark yalnızca kullanım şeklinde: normal bir fonksiyonu Greeting({ name: "Ayşe" }) diye çağırırken, bir component'i JSX içinde <Greeting name="Ayşe" /> diye "çağırırsın". Ayrıca önemli bir kural var: props'lar salt okunurdur (read-only) -- bir component, kendisine gelen bir prop'u asla değiştirmemelidir. Veriyi değiştirmek istiyorsan, bunun yolu "state" -- onu State & Events kategorisinde göreceğiz.

Özet ve Terimler Sözlüğü

Props, bir component'e dışarıdan veri göndermenin yoludur. Parent component, child'a attribute gibi değer verir; child bunu props (ya da destructuring ile doğrudan değişken olarak) okur. Bir prop gönderilmezse, varsayılan bir değer tanımlanabilir. Props salt okunurdur.

Terimler Sözlüğü

Props — Bir component'e dışarıdan gönderilen, salt okunur veriler.

Parent Component — Başka bir component'i kullanan (render eden) component.

Child Component — Bir parent component tarafından kullanılan component.

Destructuring — Bir nesnenin alanlarını doğrudan değişken olarak çıkarma söz dizimi ({ name, age } gibi).

Default Prop (Varsayılan Değer) — Bir prop gönderilmediğinde kullanılacak, önceden tanımlanmış değer.