doubleyong
管理员
管理员
  • 最后登录2026-05-25
  • 发帖数1198
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
阅读:8039回复:0

[vue]Vue 警告: <template> cannot be keyed. Place the key on real elements instead

楼主#
更多 发布于:2019-05-29 14:43
警告:
 <template> cannot be keyed. Place the key on real elements instead

代码:
&lt;template  v-for="(item,index) in menulist" :key="index"&gt;
          &lt;el-menu-item v-if="item.menuChilds.length==0" :index="(index+1)+''" &gt;
            &lt;i class="el-icon-menu"&gt;&lt;/i&gt;
            &lt;span slot="title"&gt; pw_item.menuName&lt;/span&gt;
          &lt;/el-menu-item&gt;
          &lt;template  v-else&gt;
            &lt;el-submenu :index="(index+1)+''"&gt;
              &lt;template slot="title"&gt;
                &lt;i class="el-icon-location"&gt;&lt;/i&gt;
                &lt;span&gt; pw_item.menuName&lt;/span&gt;
              &lt;/template&gt;
              &lt;el-menu-item :key="index+'-'+subindex" v-for="(submenu,subindex) in item.menuChilds" :index="(index+1)+'-'+(subindex+1)"&gt;
                &lt;i class="el-icon-menu"&gt;&lt;/i&gt;
                &lt;span slot="title"&gt; pw_submenu.menuName&lt;/span&gt;
              &lt;/el-menu-item&gt;
            &lt;/el-submenu&gt;
          &lt;/template &gt;
        &lt;/template &gt;


原因:
用key不能提升性能,是为了防止Vue默认的元素复用导致某些情况下出现数据绑定渲染问题,而template是虚拟节点,不存在复用,如果你想要绑定的话,给下面的p和span标签绑定就好,一般只需要给和数据绑定有关的元素绑定key值

解决方案:
   方案一:改用,类似于div,p 这类标签
   方案二:将key属性加到子元素里,不写在<template>中即可,代码如下:
&lt;template  v-for="(item,index) in menulist" &gt;
          &lt;el-menu-item :key="index" v-if="item.menuChilds.length==0" :index="(index+1)+''" &gt;
            &lt;i class="el-icon-menu"&gt;&lt;/i&gt;
            &lt;span slot="title"&gt; pw_item.menuName&lt;/span&gt;
          &lt;/el-menu-item&gt;
          &lt;template  v-else&gt;
            &lt;el-submenu :key="index" :index="(index+1)+''"&gt;
              &lt;template slot="title"&gt;
                &lt;i class="el-icon-location"&gt;&lt;/i&gt;
                &lt;span&gt; pw_item.menuName&lt;/span&gt;
              &lt;/template&gt;
              &lt;el-menu-item :key="index+'-'+subindex" v-for="(submenu,subindex) in item.menuChilds" :index="(index+1)+'-'+(subindex+1)"&gt;
                &lt;i class="el-icon-menu"&gt;&lt;/i&gt;
                &lt;span slot="title"&gt; pw_submenu.menuName&lt;/span&gt;
              &lt;/el-menu-item&gt;
            &lt;/el-submenu&gt;
          &lt;/template &gt;
        &lt;/template &gt;



参考 :https://segmentfault.com/q/1010000015979084?sort=created
知识需要管理,知识需要分享
游客


返回顶部

公众号

公众号