J'ai un problème ici, je ne sais pas ce qui ne va pas dans mon code, mais j'ai un avertissement dans ma console, comment puis-je supprimer cet avertissement?
[Astuce de vue]:
<todo-item v-for="todoItem in todos">
: les listes de composants rendues avec v-for doivent avoir des clés explicites. Voir https://vuejs.org/v2/guide/list.html#key pour plus d'informations.
(trouvé dans<Root>
)
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vue Tutorial</title>
<link rel="shortcut icon" href="https://vuejs.org/images/logo.png">
<script src="scripts/vue.js"></script>
</head>
<body>
<section id="app">
<p>{{ msg }}</p>
<p v-bind:title="message">
Hover your mouse over me for a few seconds to see my dynamically bound title!
</p>
<div>
<p v-if="seen">This text will show or hide if the button was clicked.</p>
<button type="button" v-on:click="isSeen">{{ isSeenText }}</button>
</div>
<ol>
<li v-for="todo in todos">
{{ todo.text }}
</li>
</ol>
<p>Total count: {{ todos.length }}</p>
<div v-bind:title="reverseMessageText">
<p>{{ reverseMessageText }}</p>
<button v-on:click="reverseMessage">Reverse Message</button>
</div>
<div>
<p>Data binding: <strong>{{ nameOfUser }}</strong></p>
<input type="text" v-model="nameOfUser">
</div>
<div>
<ol>
<todo-item v-for="todoItem in todos" v-bind:data="todoItem"></todo-item>
</ol>
</div>
</section>
<script src="scripts/app.js"></script>
</body>
</html>
app.js
var appComponent = Vue.component('todo-item', {
template: '<li>id: {{ data.id }}<br>text: {{ data.text }}</li>',
props: [
'data'
]
});
new Vue({
el: '#app',
data: {
msg: 'Hello World!',
message: 'You loaded this page on ' + new Date(),
seen: true,
isSeenText: 'Now you don\'t',
todos: [
{
text: 'Learn JavaScript'
},
{
text: 'Learn Vue'
},
{
text: 'Build something awesome'
}
],
reverseMessageText: 'Hello World from Vue.js!',
nameOfUser: 'John Rey'
},
methods: {
reverseMessage: function() {
this.reverseMessageText = this.reverseMessageText.split('').reverse().join('');
},
isSeen: function() {
this.seen = !this.seen;
this.isSeenText = this.seen ? 'Now you don\'t' : 'Now you see me';
}
}
});
console.log
Voici le lien que Vue a suggéré ici . Je pense que je n'ai aucune erreur, je veux résoudre cet avertissement, mais je ne peux pas trouver où est la cause, mais je suis novice ici pour Vue.
La réponse est explicitement listée dans le documentation que vous avez liée ...
<todo-item v-for="todoItem in todos"
v-bind:data="todoItem"
v-bind:key="todoItem.text"></todo-item>
Pour résumer certaines informations des commentaires ci-dessous ... vous utilisez :key
pour indiquer au composant comment identifier des éléments individuels. Cela lui permet de suivre les modifications de la réactivité de Vue .
Il est préférable d'essayer de lier le :key
à une propriété d'identification unique de chaque élément. Par exemple, un id
.
Ma solution à un problème similaire ressemblait à ceci:
- <el-radio v-for="option in field.options"> ...
+ <el-radio v-for="(option, index) in field.options" :key="index"> ...
Ou en utilisant la syntaxe v-bind
pour index
:
+ <el-radio v-for="(option, index) in field.options" v-bind:key="index"> ...
Vous pouvez utiliser n'importe quel champ de vos données comme clé. De plus, vous pouvez utiliser l'identifiant par défaut. De plus, vous pouvez définir une "clé" dans vos données comme dans le code ci-dessous:
Vue.component('task-list', {
template: `
<div><slot>
<task v-for="task in tasks" :key="task.key"> {{task.description}}</task>
</slot></div>
`,
data () {
return {
tasks: [
{description:"Go to market", completed:false, key:"asd"},
{description:"Wake up ", completed:true, key:"rty"},
{description:"Sleep", completed:false, key:"terw"},
{description:"Have breakfast", completed:true, key:"jdr"},
]
};
},
});
Vue.component('task', {
template: `<li><slot></slot></li>`
});
À la place de la clé dans le fichier task.key, vous pouvez mettre l'un des noms de champs, y compris l'identifiant masqué.