v-for on a template 的一个小疑问
看官方文档说在使用 v-for 的时候,需要使用一个独一无二的 key 值来提升性能,说这是和虚拟 dom 有关。但是我在 template 标签上面绑定 v-for 进行循环的时候,绑定 key 值显示报错了,但是页面正常输出数据来了
- <template> cannot be keyed. Place the key on real elements instead.
这个意思我大概知道,应该是说 key 应该在真是的元素上面。难道这种情况下的 v-for 就不用绑定 key 值吗?
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>vuetest.html</title> <link rel="stylesheet" href="./main.css"> <script src="./vue.js"></script> </head> <body> <div id="app"> <template v-for='(item,index) in list' :key='item.id'> <p>{{item.content}}</p> <span>{{item.id}}</span> </template> </div> <script> var vm = new Vue({ el:'#app', data:{ list:[ { id:0, content:'小燕子是想气死我魏姐' }, { id:1, content:'张雪迎工作室 澄清' }, { id:2, content:'结婚登记率连续 4 年下降' },{ id:3, content:'秦俊杰' } ], } }) </script> </body> </html>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
用key不能提升性能,是为了防止Vue默认的元素复用导致某些情况下出现数据绑定渲染问题,而template是虚拟节点,不存在复用,如果你想要绑定的话,给下面的p和span标签绑定就好,一般只需要给和数据绑定有关的元素绑定key值
这就是一个反人类的设计,v-for既要:key,但又不能在template上加:key,那么循环必须放在html标签上而不能放在template上,生成一堆垃圾代码,不过如果v-for用在template上,不加:key,可以无视警告,或者把 eslint关了