2.6.10
https://codesandbox.io/s/vue-template-7hwty
$attrs
si le composant enfant a un accessoire avec une clé égale à attr.La fonction de rendu est appelée une fois et $attrs
du composant ne sont pas modifiés.
Le rendu est appelé deux fois et attrs
qui a la même clé que props
du composant enfant sont supprimés.
J'ai créé sur mon projet un composant de chargeur personnalisé qui doit gérer le chargement de composants chargés paresseusement et les erreurs de mise en réseau, car je ne peux pas utiliser https://vuejs.org/v2/guide/components-dynamic-async.html#Handling -Loading -État dans mon cas. Ce bogue peut être ignoré en n'ajoutant pas de composant téléchargé à la réactivité (données externes comme variable).
L'utilisation d'une copie de $attrs
: {...this.$attrs}
supprime également le problème
Vous devriez peut-être utiliser des accessoires pour résoudre ce problème :
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");
}
}
parce que vous essayez d'obtenir des accessoires
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);
}
};
La création de la copie d'attrs et le passage avec des accessoires résolvent mon problème, mais je suis toujours curieux de savoir pourquoi le composant parent $attrs
change à cause du rendu enfant qui contient des accessoires avec la même clé?
C'est parce que l'objet $attrs
est réaffecté. Je savais que j'avais déjà vu ce problème ailleurs:
Duplicata de https://github.com/vuejs/vue/issues/10115