Geçiş Nitelikleri
Geçiş Nitelikleri
Bu sayfa,
Bileşenler Temelleribaş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 dinleyicilertarafı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ğrudandefineOptions` 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-bargibi bir nitelik,$attrs['foo-bar']olarak erişilmelidir.@clickgibi birv-onolay dinleyicisi,$attrsnesnesinde bir fonksiyon olarakonClickaltı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çindeuseAttrs()` 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)
}
}