Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Vue为什么使用它';s&x201C;就地修补程序”;,虽然我';在v-for循环中绑定密钥?_Javascript_Vue.js - Fatal编程技术网

Javascript Vue为什么使用它';s&x201C;就地修补程序”;,虽然我';在v-for循环中绑定密钥?

Javascript Vue为什么使用它';s&x201C;就地修补程序”;,虽然我';在v-for循环中绑定密钥?,javascript,vue.js,Javascript,Vue.js,我想用v-for-loop生成Vue组件的动态列表。在这个循环中,我传递的数据由组件使用,也在其中的一些子组件中使用 列表中的项目可以单独删除。所以为了避免“就地补丁”(in-placepatch)会弄乱子组件,我将一个键绑定到for循环。但它不起作用 如果我正在删除中间的一个组件,它的子组件将被渲染成另一个组件。 另一件让我困惑的事情是,如果我用“shift”而不是“index”作为键,它就可以正常工作。但是,我收到了警告,因为“键是非原语值”和“检测到重复键”。发生这种情况是因为ke

我想用v-for-loop生成Vue组件的动态列表。在这个循环中,我传递的数据由组件使用,也在其中的一些子组件中使用

列表中的项目可以单独删除。所以为了避免“就地补丁”(in-placepatch)会弄乱子组件,我将一个键绑定到for循环。但它不起作用




如果我正在删除中间的一个组件,它的子组件将被渲染成另一个组件。


另一件让我困惑的事情是,如果我用“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}
by
0
{a:30}
by
1

早些时候,
key:1
用于
{a:20}
,但现在用于
{a:30}
,这会混淆vue

这就是为什么
索引
s用作
s是件坏事。
key
s通常被认为是元素的唯一标识符,类似于数据库id

如果您的
shift
对象中有任何这样的实体,我建议您将其用作

希望这是有意义的