Geçiş Nitelikleri
Geçiş Nitelikleri
Bu sayfa,
Bileşenler Temelleri
başlıklı içeriği okuduğunuzu varsayıyor. Eğer bileşenlerle yeniyseniz, önce o bölümü okuyun.
Nitelik Kalıtımı
"Geçiş niteliği", bir bileşene geçirilen ancak alıcı bileşenin props
veya emits
içinde açıkça belirtilmemiş bir nitelik veya v-on
olay dinleyicisidir. Bu tür niteliklere yaygın örnekler class
, style
ve id
nitelikleridir.
Bir bileşen tek bir kök öğe oluşturduğunda, geçiş nitelikleri otomatik olarak kök öğenin niteliklerine eklenir. Örneğin, aşağıdaki şablona sahip bir `` bileşeni verildiğinde:
<!-- <MyButton> şablonu -->
<button>Click Me</button>
Ve bu bileşeni kullanan bir üst bileşen:
<MyButton class="large" />
Sonucu oluşturulan DOM şöyle olacaktır:
<button class="large">Click Me</button>
Burada, `class`'ın kabul edilen bir prop olarak belirtilmedi. Bu nedenle `class`, geçiş niteliği olarak kabul edilir ve otomatik olarak
'ın kök öğesine eklenir.
class
ve style
Birleşimi
Eğer çocuk bileşenin kök öğesi zaten mevcut boşluk veya stil niteliklerine sahipse, bu nitelikler üstten miras alınan class
ve style
değerleri ile birleştirilecektir. Önceki örnekteki `` şablonunu şöyle değiştirdiğimizde:
<!-- <MyButton> şablonu -->
<button class="btn">Click Me</button>
Sonuçta oluşturulan DOM şöyle olacaktır:
<button class="btn large">Click Me</button>
v-on
Dinleyici Kalıtımı
Aynı kural v-on
olay dinleyicileri için de geçerlidir:
<MyButton @click="onClick" />
click
dinleyicisi, 'ın kök öğesine, yani yerel
öğesine eklenecektir. Yerel tıklandığında, üst bileşenin `onClick` yöntemini tetikleyecektir. Eğer yerel
üzerinde v-on
ile bağlı bir click
dinleyicisi varsa, her iki dinleyici de tetiklenecektir.
İç İçe Bileşen Kalıtımı
Eğer bir bileşen başka bir bileşeni kök düğümü olarak render ederse, örneğin, bileşenini temel düğüm olarak
bileşenini render edecek şekilde yeniden yapılandırırsak:
<!-- <MyButton/> şablonu, başka bir bileşeni basitçe render eder -->
<BaseButton />
O zaman 'a alınan geçiş nitelikleri otomatik olarak
'a iletilecektir.
Dikkat edilmesi gereken noktalar:
İletilen nitelikler,
tarafından belirtilmiş olan prop'lar veya `v-on` ile belirtilen dinleyici niteliklerini içermez; diğer bir deyişle, belirtilmiş olan prop'lar ve dinleyiciler
tarafından "tüketilmiştir".İletilen nitelikler, `` tarafından belirtildiyse prop olarak kabul edilebilir.
Nitelik Kalıtımını Devre Dışı Bırakma
Bir bileşenin otomatik olarak nitelik miras almasını istemiyorsanız, bileşenin seçeneklerinde inheritAttrs: false
ayarını yapabilirsiniz.
3.3 sürümünden itibaren `içinde doğrudan
defineOptions` kullanabilirsiniz:
<script setup>
defineOptions({
inheritAttrs: false
})
// ...setup mantığı
</script>
Nitelik kalıtımını devre dışı bırakmanın yaygın senaryosu, niteliklerin kök düğümün dışında başka öğelere uygulanması gerektiğinde ortaya çıkar. inheritAttrs
seçeneğini false
olarak ayarlayarak, geçiş niteliklerinin nerelere uygulanması gerektiği üzerinde tam kontrol sağlayabilirsiniz.
Bu geçiş niteliklerine şablon ifadelerinde $attrs
ile doğrudan erişilebilir:
<span>Geçiş nitelikleri: {{ $attrs }}</span>
$attrs
nesnesi, bileşenin props
veya emits
seçenekleriyle belirtilmemiş tüm nitelikleri içerir (örneğin: class
, style
, v-on
dinleyicileri vb.).
Bazı notlar:
Props'tan farklı olarak, geçiş nitelikleri JavaScript'te orijinal yazım şekillerini korur, bu nedenle
foo-bar
gibi bir nitelik,$attrs['foo-bar']
olarak erişilmelidir.@click
gibi birv-on
olay dinleyicisi,$attrs
nesnesinde bir fonksiyon olarakonClick
altında görünür.
Önceki bölümdeki bileşeni örneğini kullanarak - bazen gerçek
öğesini stil amaçları için ekstra bir `` ile sarmalamamız gerekebilir:
<div class="btn-wrapper">
<button class="btn">Click Me</button>
</div>
Tüm geçiş niteliklerinin, class
ve v-on
dinleyicileri gibi, içteki 'a, dıştaki
'ye değil, uygulanmasını istiyoruz. Bunu inheritAttrs: false
ve v-bind="$attrs"
ile elde edebiliriz:
<div class="btn-wrapper">
<button class="btn" v-bind="$attrs">Click Me</button>
</div>
Unutmayın ki v-bind
argüman olmadan` bir nesnenin tüm özelliklerini hedef öğenin nitelikleri olarak bağlar.
Birden Fazla Kök Düğümde Nitelik Kalıtımı
Tek bir kök düğüm içeren bileşenlerden farklı olarak, birden fazla kök düğümü olan bileşenler otomatik bir nitelik geçiş davranışına sahip değildir. Eğer $attrs
açıkça bağlanmazsa, çalışma zamanı uyarısı verilecektir.
<CustomLayout id="custom-layout" @click="changeValue" />
Eğer `` aşağıdaki çoklu kök şablonuna sahipse, geçiş niteliklerinin nereye uygulanacağı konusunda Vue emin olamayacağı için bir uyarı olacaktır:
<header>...</header>
<main>...</main>
<footer>...</footer>
Eğer $attrs
açıkça bağlanırsa, uyarı bastırılacaktır:
<header>...</header>
<main v-bind="$attrs">...</main>
<footer>...</footer>
Geçiş Niteliklerine JavaScript'te Erişim
Gerekirse, `içinde
useAttrs()` API'sini kullanarak bir bileşenin geçiş niteliklerine erişebilirsiniz:
<script setup>
import { useAttrs } from 'vue'
const attrs = useAttrs()
</script>
`kullanmıyorsanız,
attrs
setup()` bağlamının bir özelliği olarak görünür:
export default {
setup(props, ctx) {
// geçiş nitelikleri ctx.attrs olarak görünür
console.log(ctx.attrs)
}
}
Burada attrs
nesnesinin her zaman en son geçiş niteliklerini yansıttığını, ancak reaktif olmadığını belirtmek gerekir (performans nedenleriyle). Değişimlerini gözlemlemek için watcher kullanamazsınız. Eğer reaktiviteye ihtiyaç duyarsanız, bir prop kullanın. Alternatif olarak, her güncellemede en son attrs
ile yan etkileri gerçekleştirmek için onUpdated()
kullanabilirsiniz.
Gerekirse, bir bileşenin geçiş niteliklerine $attrs
örnek özelliği aracılığıyla erişebilirsiniz:
export default {
created() {
console.log(this.$attrs)
}
}