2.6.10
https://codesandbox.io/s/vue-template-7hwty
$attrs
إذا كان للمكون الفرعي أي خاصية بمفتاح يساوي attr.يتم استدعاء وظيفة التقديم مرة واحدة ولا يتم تغيير $attrs
المكون.
يتم استدعاء التقديم مرتين وتتم إزالة attrs
الذي يحتوي على مفتاح مثل props
للمكون الفرعي.
لقد قمت بإنشاء مكون محمل مخصص لمشروعي والذي يجب أن يتعامل مع تحميل المكونات البطيئة التحميل وأخطاء الشبكة ، لأنني لا أستطيع استخدام https://vuejs.org/v2/guide/components-dynamic-async.html#Handling -Loading -الدولة في حالتي. يمكن التخلص من هذا الخطأ من خلال عدم إضافة المكون الذي تم تنزيله إلى التفاعلية (البيانات الخارجية كمتغير).
يؤدي استخدام نسخة من $attrs
: {...this.$attrs}
إزالة المشكلة أيضًا
ربما يجب عليك استخدام الدعائم لحل هذه المشكلة :
render(h) {
console.log("Attributes of loader:", this.$attrs);
if (this.targetComponent) {
return h(this.targetComponent, {
props: this.$attrs // Change attrs to props,not `attrs: this.$attrs`
});
} else {
return h("div", "Component is loading");
}
}
لأنك تحاول إدخال الدعائم
const targetComponent = {
props: {
// COMMENT PROP
someProp: {
type: String
}
},
render(h) {
console.log("Props of target", this.$props); // You can not get $props when render params only has attrs
return h("div", "WITH PROP:" + this.someProp);
}
};
يؤدي إنشاء نسخ من Attrs والمرور باستخدام الدعائم إلى حل مشكلتي ، ولكن لا يزال لدي فضول لماذا يتغير المكون الرئيسي $attrs
بسبب تقديم الطفل الذي يحتوي على الدعائم بنفس المفتاح؟
يرجع ذلك إلى إعادة تعيين الكائن $attrs
. علمت أنني رأيت هذه المشكلة بالفعل في مكان آخر:
نسخة مكررة من https://github.com/vuejs/vue/issues/10115