الخيارات: التركيب
provide
توفر القيم التي يمكن حقنها من طرف المكونات الأبناء.
النوع
tsinterface ComponentOptions { provide?: object | ((this: ComponentPublicInstance) => object) }التفاصيل
provideوinjectيستخدمان معًا للسماح لمكون أب أن يعمل كحاقن اعتمادية لجميع المكونات الأبناء، بغض النظر عن مدى عمق تسلسل المكونات، طالما أنها في نفس سلسلة المكون الأب.يجب أن يكون الخيار
provideإما كائن أو دالة تعيد كائنًا. يحتوي هذا الكائن على الخاصيات المتاحة للحقن في المكونات الأبناء. يمكنك استخدام الرموز كمفاتيح في هذا الكائن.مثال
استخدام أساسي:
jsconst s = Symbol() export default { provide: { foo: 'foo', [s]: 'bar' } }استخدام دالة لتوفير حالة لكل مكون:
jsexport default { data() { return { msg: 'foo' } } provide() { return { msg: this.msg } } }تجدر الملاحظة في المثال أعلاه، أن
msgالموفرة لن تكون تفاعلية. انظر العمل مع التفاعلية لمزيد من التفاصيل.اطلع أيضًا على حقن/تزويد
inject
يصرح بالخاصيات لحقنها في المكون الحالي عن طريق تحديدها من مزودي المكونات الأباء.
النوع
tsinterface ComponentOptions { inject?: ArrayInjectOptions | ObjectInjectOptions } type ArrayInjectOptions = string[] type ObjectInjectOptions = { [key: string | symbol]: | string | symbol | { from?: string | symbol; default?: any } }التفاصيل
الخيار
injectيجب أن يكون إما:- مصفوفة من السلاسل النصية، أو
- كائن حيث تكون المفاتيح هي اسم الربط المحلي والقيمة إما:
- المفتاح (سلسلة نصية أو رمز) للبحث عنه في الحقنات المتاحة، أو
- كائن حيث:
- خاصية
fromهي المفتاح (سلسلة نصية أو رمز) للبحث عنه في الحقنات المتاحة، و - تستخدم خاصية
defaultكقيمة احتياطية. مماثلة للقيم الافتراضية للخاصيات، يلزم استخدام دالة منتجة لأنواع الكائن لتجنب مشاركة القيمة بين عدة نسخ من المكون.
- خاصية
ستكون الخاصية المحقونة
undefinedإذا لم توفر خاصية مطابقة أو قيمة افتراضية.
تجدر الملاحظة أن الربط المحقون ليس تفاعليًا. هذا أمر مقصود. ومع ذلك، إذا كانت القيمة المحقونة هي كائن تفاعلي، فإن الخاصيات على هذا الكائن تظل تفاعلية. انظر العمل مع التفاعلية لمزيد من التفاصيل.
مثال
استخدام أساسي:
jsexport default { inject: ['foo'], created() { console.log(this.foo) } }استخدام قيمة محقونة كقيمة افتراضية لخاصية:
jsconst Child = { inject: ['foo'], props: { bar: { default() { return this.foo } } } }استخدام قيمة محقونة كإدخال بيانات:
jsconst Child = { inject: ['foo'], data() { return { bar: this.foo } } }يمكن أن تكون الحقنات اختيارية مع قيمة افتراضية:
jsconst Child = { inject: { foo: { default: 'foo' } } }إذا كان يحتاج إلى حقنه من خاصية باسم مختلف، استخدم
fromللإشارة إلى خاصية المصدر:jsconst Child = { inject: { foo: { from: 'bar', default: 'foo' } } }مماثلة للقيم الافتراضية للخاصيات، يجب استخدام دالة منتجة للقيم غير الأساسية:
jsconst Child = { inject: { foo: { from: 'bar', default: () => [1, 2, 3] } } }اطلع أيضًا على حقن/تزويد
mixins
مصفوفة من كائنات الخيارات لتدمج في المكون الحالي.
النوع
tsinterface ComponentOptions { mixins?: ComponentOptions[] }التفاصيل
خيار
mixinsيقبل مصفوفة من المخاليط. يمكن أن تحتوي المخاليط هذه على خيارات النسخة مثل كائنات النسخة العادية، وستدمج مع الخيارات النهائية باستخدام منطق دمج الخيارات معين. على سبيل المثال، إذا كانت المخاليط تحتوي على خطافcreatedوكان المكون نفسه يحتوي أيضًا على خطافcreated، ستستدعى كلتا الدالتين.تستدعى خطافات المخاليط بالترتيب الذي وفرت به، وتستدعى قبل خطافات المكون الخاصة به.
غير موصى به بعد الآن
في Vue 2، كانت المخاليط هي الآلية الأساسية لإنشاء شظايا قابلة لإعادة الاستخدام من منطق المكون. في حين أن المخاليط ما زالت مدعومة في Vue 3، الدوال المركبة باستخدام واجهة التركيب هي الآلية المفضلة الآن لإعادة استخدام الكود بين المكونات.
مثال
jsconst mixin = { created() { console.log(1) } } createApp({ created() { console.log(2) }, mixins: [mixin] }) // => 1 // => 2
extends
مكون "فئة أساسية" للتوريث منه.
النوع
tsinterface ComponentOptions { extends?: ComponentOptions }التفاصيل
يسمح لمكون واحد بالوراثة من مكون آخر، وراثة خيارات المكون الخاص به.
من وجهة نظر ي تنفيذية،
extendsمتطابق تقريبًا معmixins. سيتم التعامل مع المكون المحدد بواسطةextendsكما لو كان أول مخلوط.ومع ذلك،
extendsوmixinsتعبران عن نوايا مختلفة. يستخدم خيارmixinsأساسًا لتركيب أجزاء من الوظائف، بينما يهتمextendsأساسًا بالوراثة.مثل
mixins، ستدمج أي خيارات (باستثناءsetup()) باستخدام استراتيجية الدمج المناسبة.مثال
jsconst CompA = { ... } const CompB = { extends: CompA, ... }غير موصى به للواجهة التركيبية
extendsمصمم لواجهة الخيارات ولا يتعامل مع دمج خطافsetup().
في الواجهة التركيبية، النموذج الذهني المفضل لإعادة استخدام المنطق هو "التركيب" على "الوراثة". إذا كان لديك شيفرة من مكون يحتاج إلى إعادة استخدامه في مكون آخر، فكر في استخراج الشيفرة ذات الصلة إلى دوال تركيبية.
إذا كنت لا تزال تنوي "تمديد" مكون باستخدام الواجهة التركيبية، يمكنك استدعاء خطاف setup() للمكون الأساسي في خطاف setup() للمكون الممتد:
js
import Base from './Base.js'
export default {
extends: Base,
setup(props, ctx) {
return {
...Base.setup(props, ctx),
// الربط المحلي
}
}
}:::