Je suis nouveau dans VueJS, j'ai un avertissement de Vue,
[Vue warn]: You may have an infinite update loop in a component render function.
Lorsque j'utilise V-for variable dans V-bind: style, voici un exemple: Dans le modèle:
<div v-for="item in model.items" v-bind:class="test(item.result)">
{{item.id}}
</div>
dans le script:
data() {
return {
accept: false,
not_accept: false,
};
},
methods: {
test(result) {
if (result == 'accept') {
this.accept = true;
this.not_accept = false;
} else if (result == 'Not accept') {
this.accept = false;
this.not_accept = true;
} else {
console.log(result);
}
return {
success: this.accept,
danger: this.not_accept,
};
},
},
@ Decade a raison sur le problème. Voici le problème exact:
NOTE: la méthode de rendu est déclenchée à chaque changement d'état
test
. Cette fonction est défectueuse car elle tente à nouveau de muter l’état, provoquant ainsi le cycle de rendu - test - rendu.Vous pouvez résoudre ce problème en faisant en sorte que votre fonction de test ne mute pas l'état à la place, comme suit:
methods: {
test(result) {
let accept;
if (result == 'accept') {
accept = true;
} else if (result == 'Not accept') {
accept = false;
} else {
console.log(result);
}
return {
success: accept,
danger: !accept,
};
},
}
J'espère que ça a aidé!
Premièrement, je ne suis pas sûr de savoir pourquoi vous avez not_accept
, ne pouvez-vous pas simplement utiliser !this.accept
à la place?
Je ne suis pas sûr à 100% pourquoi vous recevez cet avertissement, mais voici ce que je pense.
L'observateur de v-bind:class
surveille les modifications apportées à item.result
, this.accept
et this.not_accept
. Toute modification de ces valeurs entraînera son restitution en appelant à nouveau test
. Mais dans test
, vous modifiez this.accept
et this.not_accept
, donc Vue doit vérifier à nouveau si le résultat a changé à cause de cela et, ce faisant, il pourrait changer this.accept
et this.not_accept
à nouveau, etc.
La liaison class
et les données sont erronées. class
pour chacun des éléments sera défini sur la même chose, mais il semble que vous souhaitiez un style personnalisé pour chaque élément en fonction de item.result
. Vous ne devriez vraiment pas modifier les propriétés de this
dans test
.
Il est difficile de donner une réponse complète car je ne suis pas tout à fait sûr du fonctionnement de votre composant et de ce qu'il devrait faire.
Vous pouvez obtenir cette erreur si vous appelez une fonction au lieu de la transmettre dans une directive vue. Voici un exemple:
J'ai créé une directive personnalisée pour charger les données via AJAX lorsqu'un onglet boostrap est affiché .
v-on-show-bs-tab="getFirstPageSites()"
Ici, vue semble appeler la fonction (ou plutôt évaluer l'expression) et transmettre le résultat à la directive.
v-on-show-bs-tab="getFirstPageSites"
Ici, je passe la fonction par son nom de sorte que je puisse l'appeler dans la directive.