Bileşenlere Prop'ları Aktarma
React bileşenleri, birbirleriyle iletişim kurmak için prop’ları kullanır. Her üst eleman, alt elemanlarına prop’lar vererek onlarla bilgi paylaşabilir. Prop’lar, size HTML özelliklerini hatırlatabilir, ancak onların aracılığıyla nesneler, diziler ve fonksiyonlar da dahil olmak üzere herhangi bir JavaScript değeri aktarabilirsiniz.
Bunları öğreneceksiniz
- Bileşene prop nasıl aktarılır
- Bir bileşenden prop nasıl okunur
- Prop’lar için varsayılan değerler nasıl belirlenir
- Bir bileşene JSX nasıl aktarılır
- Prop’ların zamanla nasıl değiştiği
Tanıdık Prop’lar
Prop’lar, JSX etiketine ilettiğiniz bilgilerdir. Örneğin, className, src, alt, width ve height, bir <img>’ye aktarabileceğiniz prop’lardan bazılarıdır:
function Avatar() { return ( <img className="avatar" src="https://react.dev/images/docs/scientists/1bX5QH6.jpg" alt="Lin Lanying" width={100} height={100} /> ); } export default function Profile() { return ( <Avatar /> ); }
Bir <img> etiketine aktarabileceğiniz prop’lar önceden tanımlanmıştır (ReactDOM, HTML standardına uygundur). Ancak, özelleştirmek için <Avatar> gibi kendi bileşenlerinize herhangi bir özellik aktarabilirsiniz. İşte nasıl!
Bileşene prop’lar aktarma
Bu kodda, Profile bileşeni, Avatar adlı alt bileşenine herhangi bir prop aktarmıyor:
export default function Profile() {
return (
<Avatar />
);
}Avatar’a iki adımda prop’lar ekleyebilirsiniz.
Adım 1: Alt bileşene prop’lar aktarma
Öncelikle, Avatar’a bazı prop’lar ekleyin. Örneğin, iki prop ekleyelim: person (bir nesne) ve size (bir sayı):
export default function Profile() {
return (
<Avatar
person={{ name: 'Lin Lanying', imageId: '1bX5QH6' }}
size={100}
/>
);
}Şimdi bu prop’ları Avatar bileşeni içinde okuyabilirsiniz.
Adım 2: Alt eleman içinde prop’ları okuma
Bu prop’ları, function Avatar’dan hemen sonra ({ ve }) içinde virgülle ayrılan person, size isimlerini yazarak okuyabilirsiniz. Bu, onları Avatar kodunun içinde bir değişken gibi kullanmanıza olanak tanır.
function Avatar({ person, size }) {
// burada person ve size kullanılabilir
}Avatar’a, person ve size prop’larını kullanarak render etmek için biraz mantık ekleyin ve hazırsınız.
Artık Avatar’ı farklı prop’larla birçok farklı şekilde render etmek için yapılandırabilirsiniz. Değerler ile oynamayı deneyin!
import { getImageUrl } from './utils.js'; function Avatar({ person, size }) { return ( <img className="avatar" src={getImageUrl(person)} alt={person.name} width={size} height={size} /> ); } export default function Profile() { return ( <div> <Avatar size={100} person={{ name: 'Katsuko Saruhashi', imageId: 'YfeOqp2' }} /> <Avatar size={80} person={{ name: 'Aklilu Lemma', imageId: 'OKS67lh' }} /> <Avatar size={50} person={{ name: 'Lin Lanying', imageId: '1bX5QH6' }} /> </div> ); }
Prop’lar, üst ve alt bileşenleri bağımsız olarak düşünmenize olanak tanır. Örneğin, Avatar’ın bunları nasıl kullandığını düşünmeden, Profile içindeki person veya size prop’larını değiştirebilirsiniz. Benzer şekilde, Profile’a bakmadan, Avatar’ın bu prop’ları nasıl kullandığını değiştirebilirsiniz.
Prop’ları ayarlayabileceğiniz “düğmeler” gibi düşünebilirsiniz. Aslında, prop’lar fonksiyonlara sağlanan argümanlarla aynı rolü üstlenirler - aslında, prop’lar bileşeniniz için tek argümanlardır! React bileşen fonksiyonları, bir props nesnesi olarak tek bir argümanı kabul ederler:
function Avatar(props) {
let person = props.person;
let size = props.size;
// ...
}Genellikle tüm props nesnesine ihtiyacınız olmaz, bu yüzden onu bireysel prop’lara ayırarak yapıyı çözmeniz gerekir.
Bir prop için varsayılan değeri belirleme
Bir prop’a, belirtilen değer olmadığında geri dönecek varsayılan bir değer vermek isterseniz, parametreden hemen sonra = ve varsayılan değeri koyarak yapı çözmeyle yapabilirsiniz:
function Avatar({ person, size = 100 }) {
// ...
}Şimdi, <Avatar person={...} /> size prop’u belirtilmeden render edilirse, size 100 olarak ayarlanacaktır.
Varsayılan değer yalnızca, size prop’u eksikse veya size={undefined} olarak geçirilirse kullanılır. Ancak size={null} veya size={0} olarak geçirirseniz, varsayılan değer kullanılmaz.
JSX yayılım sözdizimiyle prop’ları iletmek
Bazı durumlarda, prop’ları aktarmak çok tekrar edici olabilir: