当前位置: 首页 > 知识库问答 >
问题:

vue.js - 怎么解决<transition-group> children must be keyed: <li> 这个警告?

松钊
2024-07-15

控制台的警告是这样的。

[Vue warn]: <transition-group> children must be keyed: <li>

found in

---> <TransitionGroup>
       <ElUploadList> at packages/upload/src/upload-list.vue
         <ElUpload> at packages/upload/src/index.vue
           <Root>

我的html代码是这样,v-for遍历渲染了几个el-upload。百度一下,解决办法说要加key,我在v-for那里和el-upload标签加了都没有用。另外FXJXM是编码,是唯一的。

<div class="body-item" v-for="(item, index) in FXJXMS" :key="item.FXJXM">
    <div class="title">
        <div class="value">{{item.FDATAVALUE}}</div>
        <div class="desc">{{item.FInspectionStandard}}</div>
    </div>
    <div class="buttom">
        <el-radio-group v-model="normals[index]" class="radio-group">
            <el-radio :label="1">正常</el-radio>
            <el-radio :label="2">异常</el-radio>
        </el-radio-group>
        <el-upload :key="item.FXJXM" class="upload" action="/xj/upload" :data="document" :on-change="handleChange" :on-success="uploadSuccess"  :file-list="fileList">
            <el-button size="small" type="primary" class="el-icon-picture" @click="getIndex(index)">拍照</el-button>
        </el-upload>
    </div>
</div>

请问这个警告得怎么解决??

共有2个答案

艾谦
2024-07-15

检查一下 :file-list="fileList" 的传值有没有问题

柯建修
2024-07-15

这个警告是因为在使用 <transition-group> 组件时,你需要在直接子元素(在这个案例中是 <div class="body-item">)上添加 key 而不是在 <el-upload> 上。<transition-group> 需要知道每个子元素的唯一标识符(key)来跟踪它们的身份,以便在列表更新时应用正确的过渡。

在你的代码中,虽然你在 <div class="body-item"> 的父元素上使用了 v-for:key,但 <transition-group> 并不直接包含这些 <div>,因此 Vue 无法识别出它们。

但是,如果你没有直接使用 <transition-group>,而只是看到了与 <transition-group> 相关的警告,那可能是因为你使用的 el-upload 组件(可能是 Element UI 的 el-upload)内部使用了 <transition-group>。在这种情况下,你需要确保传递给 el-upload 组件的列表项(通常是文件列表)中的每个文件都有唯一的 key

然而,在你的案例中,你似乎并没有在 el-upload 内部使用列表,所以你可能不需要在 el-upload 上添加 key。相反,你应该确保 <div class="body-item">key 绑定是正确的。

但是,为了完全消除这个警告,并且假设 el-upload-list(可能是 Element UI 的一个组件,它管理上传的文件列表)确实在其内部使用了 <transition-group>,你可能需要确保传递给 el-upload 组件的任何列表(比如文件列表)中的每个项都有唯一的 key。但是,在你的代码中并没有看到这样的列表。

基于你给出的代码,这里是你应该如何修复这个警告的示例:

<div v-for="(item, index) in FXJXMS" :key="item.FXJXM" class="body-item">
    <!-- ... 其他代码 ... -->
    <el-upload class="upload" action="/xj/upload" :data="document" :on-change="handleChange" :on-success="uploadSuccess" :file-list="fileList">
        <el-button size="small" type="primary" class="el-icon-picture" @click="getIndex(index)">拍照</el-button>
    </el-upload>
</div>

注意,我已经将 :key="item.FXJXM" 移动到了 <div class="body-item"> 上,这是正确的做法,因为 v-for 是在这个元素上使用的。如果 item.FXJXM 是唯一的,那么这个警告应该就会消失。

 类似资料:
  • 失败:生成失败,出现异常。 > 其中:Script“C:\flutter\packages\flutter_tools\gradle\flutter.gradle”行:900 错误:任务“:app:CompileFlutterBuildDebug”执行失败。 进程“command”C:\flutter\bin\flutter.bat“已完成,退出值为非零%1 生成在%12s中失败异常:Gradle

  • 说我这个属性无效、不合法的,没有定义的 controller是有定义对象的,结果在controller就报上面的错了 InspectionPlan 对象有个属性是private List<FEntity> FEntity; FEntity对象属性FInspectionStandard的get/set方法也有,名字也取跟前端一样。但提交就报错了。请问这是怎么回事? js请求是这样的

  • 问题: impl: @Service public class GraduateCollegeServiceImpl extends ServiceImpl<GraduateCollegeMapper, GraduateCollege> implements IGraduateCollegeService { controller: @Api(tags="各高校") @RestController

  • 我有一个程序使用片段,但我有一个问题,当我包括列表视图在我的传呼机当一个项目在滑动菜单选择。 这些错误是: 在制表符适配器上 公共类TabsPagerAdapter扩展FragmentStatePagerAdapter{ } 行中的错误: public FragmentActivity getItem(int index){ 此行有多个标记-实现android.support.v4.app.Fra

  • Props: tag - string,默认为 span move-class - 覆盖移动过渡期间应用的 CSS 类。 除了 mode,其他特性和 <transition> 相同。 事件: 事件和 <transition> 相同。 用法: <transition-group> 元素作为多个元素/组件的过渡效果。<transition-group> 渲染一个真实的 DOM 元素。默认渲染 <spa

  • 在线地址, https://stackblitz.com/edit/vue-c98wtb?file=src%2Fcomponents%... 先把数据往下滚动一下,然后再点击 Recovery 按钮, 视图没有更新