私はVueJSが初めてで、Vueから警告を受け取りました。
[Vue warn]: You may have an infinite update loop in a component render function.
V-bind:styleでV-for変数を使用する場合の例を次に示します。
<div v-for="item in model.items" v-bind:class="test(item.result)">
{{item.id}}
</div>
スクリプト内:
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は問題について正しいです。正確な問題は次のとおりです。
注:状態が変化すると、renderメソッドがトリガーされます
test
の結果に基づいてクラスをバインドしようとしていますが、この関数は状態を変更しようとしているため、レンダリング-テスト-レンダリングサイクルを引き起こしています。次のように、テスト関数で状態を変更しないようにすることで、この問題を解決できます。
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,
};
},
}
お役に立てば幸いです!
まず、あなたがnot_accept
を持っている理由がわかりません。代わりに!this.accept
を使用することはできませんか?
この警告が表示される理由は100%わかりませんが、ここに私が思うことを示します。
v-bind:class
のウォッチャーは、item.result
、this.accept
、およびthis.not_accept
への変更を監視しています。これらの値を変更すると、test
を再度呼び出すことで再レンダリングされます。ただし、test
内でthis.accept
とthis.not_accept
を変更しているため、Vueはそのために結果が変更された場合、再度確認する必要があります、そうすることでthis.accept
とthis.not_accept
againなどを変更できます。
class
バインディングとデータに欠陥があります。各アイテムのclass
は同じものに設定されますが、item.result
に応じて各アイテムのカスタムスタイルが必要なように見えます。 this
内のtest
のプロパティを変更しないでください。
あなたのコンポーネントがどのように機能し、何をすべきなのか完全にはわからないので、完全な答えを出すのは難しいです。
vueディレクティブで関数を渡す代わりに関数を呼び出すと、このエラーが発生する可能性があります。以下に例を示します。
カスタムを作成しました AJAX boostrapタブが表示されたときにデータをロードするためのディレクティブ 。
v-on-show-bs-tab="getFirstPageSites()"
ここで、vueは、関数を呼び出す(または式を評価する)ように見え、結果をディレクティブに渡します。
v-on-show-bs-tab="getFirstPageSites"
ここでは、ディレクティブで呼び出すことができるように、名前で関数を渡します。