vue number length for array javascript vue.js vuejs2

javascript - number - v repeat



Advertencia de consola: las listas de componentes representadas con v-for deben tener claves explĂ­citas (3)

Tengo un problema aquí, no sé qué está mal en mi código, pero recibí una advertencia en mi consola, ¿cómo puedo eliminar esta advertencia?

[Consejo de Vue]: <todo-item v-for="todoItem in todos"> : las listas de componentes representadas con v-for deben tener claves explícitas. Consulte https://vuejs.org/v2/guide/list.html#key para obtener más información.
(encontrado en <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

Aquí está el enlace que Vue sugirió here . Creo que no tengo ningún error, quiero resolver esa advertencia, pero no puedo encontrar la causa, por cierto, soy novato en Vue.


La respuesta se enumera explícitamente en la https://vuejs.org/v2/guide/list.html#key ...

<todo-item v-for="todoItem in todos" v-bind:data="todoItem" v-bind:key="todoItem.text"></todo-item>

Para resumir alguna información de los comentarios a continuación ... utiliza :key para que el componente sepa cómo identificar elementos individuales. Esto le permite realizar un seguimiento de los cambios para la reactividad de Vue.

Es mejor tratar de vincular la :key a alguna propiedad de identificación única de cada elemento. Por ejemplo, una id .


Mi solución a un problema similar se veía así:

- <el-radio v-for="option in field.options"> ... + <el-radio v-for="(option, index) in field.options" :key="index"> ...

O usando la sintaxis de v-bind para el index :

+ <el-radio v-for="(option, index) in field.options" v-bind:key="index"> ...


Puede usar cualquier campo de sus datos como clave. Además, puede usar la identificación predeterminada. Además, puede definir una "clave" en sus datos como en el siguiente código:

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>` });

En lugar de la clave en task.key, puede poner uno de los nombres de campo, incluida la identificación oculta.