2.6.10
https://codesandbox.io/s/vue-template-7hwty
$attrs
jika komponen anak memiliki prop dengan kunci sama dengan attr.Fungsi render dipanggil sekali dan $attrs
komponen tidak berubah.
Render dipanggil dua kali dan attrs
yang memiliki kunci yang sama dengan props
komponen anak dihapus.
Saya membuat komponen pemuat khusus proyek saya yang harus menangani pemuatan komponen yang dimuat lambat dan kesalahan jaringan, karena saya tidak dapat menggunakan https://vuejs.org/v2/guide/components-dynamic-async.html#Handling -Loading -Negara dalam kasus saya. Bug ini dapat dihilangkan dengan tidak menambahkan komponen yang diunduh ke reaktivitas (di luar data sebagai variabel).
Menggunakan salinan $attrs
: {...this.$attrs}
juga menghilangkan masalah
Mungkin Anda harus menggunakan alat peraga untuk menyelesaikan masalah ini :
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");
}
}
karena Anda mencoba memasukkan properti
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);
}
};
Baik membuat penyalinan attrs dan meneruskan dengan props menyelesaikan masalah saya, tetapi saya masih penasaran mengapa komponen induk $attrs
berubah karena merender anak yang berisi props dengan kunci yang sama?
Itu karena objek $attrs
dipindahkan. Saya tahu saya sudah melihat masalah ini di tempat lain:
Duplikat dari https://github.com/vuejs/vue/issues/10115