获取错误“ index.vue中的迭代元素期望具有'v-bind:key'指令vue / require-v-for-key“

use*_*975 3 vue.js contentful

我是vue.js的新手。我有一个简单的index.vue,它试图连接到内容丰富的目录并显示内容丰富的条目。我在index.vue中的代码如下所示:


<template>
  <div>
    <!-- render data of the person -->
    <h1>{{ person.fields.name }}</h1>
    <!-- render blog posts -->
    <ul>
      <li v-for="post in posts">
        {{ post.fields.title }}
      </li>
    </ul>
  </div>
</template>

<script>
  import {createClient} from '~/plugins/contentful.js'

  const client = createClient()
Run Code Online (Sandbox Code Playgroud)

但是,当我从浏览器尝试localhost:3000时,它返回以下错误:


./pages/index.vue模块错误(来自./node_modules/eslint-loader/index.js):

C:\ Users \ admin \ pdress \ pages \ index.vue 7:7错误迭代中的元素期望具有'v-bind:key'指令vue / require-v-for-key

?1个问题(1个错误,0个警告)


如果有人可以帮助我进一步进行vue.js的学习,我将不胜感激。提前致谢

Har*_*til 5

@ljubadr的建议是正确的。您需要这样做:

<li v-for="post in posts" v-bind:key="post.id">

<!-- OR USE SHORTCUT NOTATION -->
<li v-for="post in posts" :key="post.id">
Run Code Online (Sandbox Code Playgroud)

原因与性能有关。该属性key可帮助Vue确定列表中的唯一项。考虑排序的例子。如果您的用户界面具有用于帖子的排序按钮,则您post数组中项目的顺序将更改。但这是否意味着Vue将重新渲染整个列表?当然不是!使用:key它可以确定项目是否已经在UI上呈现。它只是简单地对DOM节点进行改组并节省了昂贵的渲染周期。

其次,如果在使用时列表中有复杂的组件v-for,但:key没有提供,则只要更改或重新排序列表,它就只会更改DOM,但不会破坏现有组件,并且可能导致局部状态不匹配。这就是为什么必须具有:key属性。

阅读Vue.js文档以获取更多信息。

注意:还请记住,使用v-for indexfor :key是一个坏主意,因为它在整个集合中并不是唯一的。