Javascript Vue为什么使用它';s&x201C;就地修补程序”;,虽然我';在v-for循环中绑定密钥?
我想用v-for-loop生成Vue组件的动态列表。在这个循环中,我传递的数据由组件使用,也在其中的一些子组件中使用 列表中的项目可以单独删除。所以为了避免“就地补丁”(in-placepatch)会弄乱子组件,我将一个键绑定到for循环。但它不起作用Javascript Vue为什么使用它';s&x201C;就地修补程序”;,虽然我';在v-for循环中绑定密钥?,javascript,vue.js,Javascript,Vue.js,我想用v-for-loop生成Vue组件的动态列表。在这个循环中,我传递的数据由组件使用,也在其中的一些子组件中使用 列表中的项目可以单独删除。所以为了避免“就地补丁”(in-placepatch)会弄乱子组件,我将一个键绑定到for循环。但它不起作用 如果我正在删除中间的一个组件,它的子组件将被渲染成另一个组件。 另一件让我困惑的事情是,如果我用“shift”而不是“index”作为键,它就可以正常工作。但是,我收到了警告,因为“键是非原语值”和“检测到重复键”。发生这种情况是因为ke
如果我正在删除中间的一个组件,它的子组件将被渲染成另一个组件。
另一件让我困惑的事情是,如果我用“shift”而不是“index”作为键,它就可以正常工作。但是,我收到了警告,因为“键是非原语值”和“检测到重复键”。发生这种情况是因为
key
s是for循环中呈现的项的标识符。当一个元素发生变化时,它们有助于防止所有内容重新招标
现在,假设您有以下移位
数组:
shifts = [{a: 10}, {a: 20}, {a: 30}]
当您将它们的索引作为键来呈现时,您将通过0
来识别{a:10}
,{a:20}
通过1
,{a:30}
通过2
等等
当您删除一个shift
时,比如说{a:20}
,则shift
数组变为:
shifts = [{a: 10}, {a: 30}]
这些要素的标识如下:
{a:10}
by0
,{a:30}
by1
早些时候,key:1
用于{a:20}
,但现在用于{a:30}
,这会混淆vue
这就是为什么索引
s用作键
s是件坏事。
key
s通常被认为是元素的唯一标识符,类似于数据库id
如果您的shift
对象中有任何这样的实体,我建议您将其用作键
希望这是有意义的