Seçenekler: Kompozisyon
provide
Alt bileşenler tarafından enjekte edilebilecek değerler sağlayın.
Tür
tsinterface ComponentOptions { provide?: object | ((this: ComponentPublicInstance) => object) }Detaylar
provideveinjectbirlikte kullanıldığında, bir üst bileşenin, bileşen hiyerarşisinin ne kadar derin olduğuna bakılmaksızın, aynı üst zincirde oldukları sürece tüm alt bileşenleri için bağımlılık enjektörü görevi görmesini sağlar.provideseçeneği ya bir nesne ya da bir nesne döndüren bir fonksiyon olmalıdır. Bu nesne, alt bileşenlerine enjekte edilebilecek özellikleri içerir. Bu nesnede semboller anahtar olarak kullanılabilir.Örnek
Temel kullanım:
jsconst s = Symbol() export default { provide: { foo: 'foo', [s]: 'bar' } }Bileşen bazında durum bilgisi sağlamak için bir fonksiyon kullanma:
jsexport default { data() { return { msg: 'foo' } } provide() { return { msg: this.msg } } }Yukarıdaki örnekte, sağlanan
msg'nin tepkisel OLMADIĞINI unutmayın. Daha fazla bilgi için Tepkisellikle Çalışmak bölümüne bakın.Ayrıca bakın: Provide / Inject
inject
Ata sağlayıcılardan alınarak mevcut bileşene enjekte edilecek özellikleri tanımlayın.
Tür
tsinterface ComponentOptions { inject?: ArrayInjectOptions | ObjectInjectOptions } type ArrayInjectOptions = string[] type ObjectInjectOptions = { [key: string | symbol]: | string | symbol | { from?: string | symbol; default?: any } }Detaylar
injectseçeneği şunlardan biri olmalıdır:- String'lerden oluşan bir dizi (array), veya
- Anahtarların yerel bağlama (local binding) adı olduğu ve değerin şunlardan biri olduğu bir nesne:
- Mevcut enjeksiyonlarda aranacak anahtar (string veya Symbol), veya
- Aşağıdakileri içeren bir nesne:
fromözelliği, mevcut enjeksiyonlarda aranacak anahtar (string veya Symbol), vedefaultözelliği, geri dönüş (fallback) değeri olarak kullanılır. Props varsayılan değerlerine benzer şekilde, birden fazla Bileşen Örneği (Component Instance) arasında değer paylaşımını önlemek için nesne türlerinde bir üretici fonksiyon (factory function) kullanılması gerekir.
Eğer ne eşleşen bir özellik ne de varsayılan bir değer sağlanmamışsa, enjekte edilen özellik
undefinedolacaktır.Enjekte edilen bağlamaların (bindings) tepkisel (reactive) OLMADIĞINA dikkat edin. Bu bilinçli bir tasarımdır. Ancak, enjekte edilen değer tepkisel bir nesne ise, o nesne üzerindeki özellikler tepkisel kalmaya devam eder. Daha fazla detay için Tepkisellikle Çalışmak bölümüne bakınız.
Örnek
Temel kullanım:
jsexport default { inject: ['foo'], created() { console.log(this.foo) } }Enjekte edilen bir değeri bir prop için varsayılan değer olarak kullanma:
jsconst Child = { inject: ['foo'], props: { bar: { default() { return this.foo } } } }Veri girişi olarak enjekte edilen bir değer kullanma:
jsconst Child = { inject: ['foo'], data() { return { bar: this.foo } } }Enjeksiyonlar isteğe bağlı olabilir ve varsayılan bir değere sahip olabilir:
jsconst Child = { inject: { foo: { default: 'foo' } } }Eğer farklı bir ada sahip bir özellikten enjekte edilmesi gerekiyorsa, kaynak özelliği belirtmek için
fromifadesini kullanın:jsconst Child = { inject: { foo: { from: 'bar', default: 'foo' } } }Varsayılan değerlerde olduğu gibi, ilkel olmayan değerler için de bir fabrika fonksiyonu kullanmanız gerekir:
jsconst Child = { inject: { foo: { from: 'bar', default: () => [1, 2, 3] } } }Ayrıca bakın: Provide / Inject
mixins
Mevcut bileşene eklenecek seçenek nesnelerinin bir dizisi.
Tür
tsinterface ComponentOptions { mixins?: ComponentOptions[] }Detaylar
mixins seçeneği, mixin nesnelerinden oluşan bir dizi kabul eder. Bu mixin nesneleri, normal örnek nesneler gibi örnek seçenekler içerebilir ve belirli seçenek birleştirme mantığı kullanılarak nihai seçeneklerle birleştirilirler. Örneğin, mixin'iniz bir created kancası içeriyorsa ve bileşenin kendisi de bir tane içeriyorsa, her iki işlev de çağrılır.
Mixin kancaları, sağlandıkları sırayla ve bileşenin kendi kancalarından önce çağrılır.
Artık Önerilmiyor
Vue 2'de mixin'ler, bileşen mantığının yeniden kullanılabilir parçalarını oluşturmanın birincil mekanizmasıydı. Mixin'ler Vue 3'te desteklenmeye devam etse de, bileşenler arasında kod yeniden kullanımı için tercih edilen yaklaşım artık Composition API kullanan Composable fonksiyonlar'dır.
Örnek
jsconst mixin = { created() { console.log(1) } } createApp({ created() { console.log(2) }, mixins: [mixin] }) // => 1 // => 2
extends
Genişletilecek bir "temel sınıf" (base class) bileşeni.
Tür
tsinterface ComponentOptions { extends?: ComponentOptions }Detaylar
Bir bileşenin, diğer bir bileşenin seçeneklerini miras alarak onu genişletmesine olanak tanır.
Uygulama açısından,
extendsneredeysemixinsile aynıdır.extendsile belirtilen bileşen, ilk mixinmiş gibi ele alınacaktır.Ancak,
extendsvemixinsfarklı amaçları ifade eder.mixinsseçeneği öncelikle işlevsellik parçalarını bir araya getirmek için kullanılırken,extendsöncelikle miras alma ile ilgilidir.mixins'te olduğu gibi,setup()hariç tüm seçenekler ilgili birleştirme stratejisi kullanılarak birleştirilecektir.Örnek
jsconst CompA = { ... } const CompB = { extends: CompA, ... }Composition API İçin Önerilmiyor
extends, Options API için tasarlanmıştır vesetup()kancasının birleştirilmesini işlemez.Composition API'de mantığın yeniden kullanımı için tercih edilen zihinsel model, "kalıtım" (inheritance) yerine "kompozisyon"dur (compose). Bir bileşenden gelen ve başka bir bileşende yeniden kullanılması gereken mantığınız varsa, ilgili mantığı bir Composable içine çıkarmayı düşünün.
Yine de Composition API kullanarak bir bileşeni "genişletmeyi" (extend) düşünüyorsanız, genişleten bileşenin
setup()işlevinde temel bileşeninsetup()işlevini çağırabilirsiniz:jsimport Base from './Base.js' export default { extends: Base, setup(props, ctx) { return { ...Base.setup(props, ctx), // yerel bağlamalar } } }