• key值的应用场景


    我们知道我们在v-for中会绑定对应的key值,这个key作为虚拟dom的身份标识,当响应式更新时,diff算法会将key值进行比对,根据新旧虚拟dom的key决定是否重新渲染。

    除了在v-for身上他也可以巧妙的利用在组件上

    1、各类组件,比如el-tree,el-table比较实用

    1.1、el-tree

    如下图我们的树上有个刷新按钮。很多人可能会用v-if将此dom重新刷新,但是还有种方式就是可以给tree绑定一个key,当点击刷新按钮更新tree的key值即可完成刷新操作

    代码如下:

    1. //1.在el-tree上绑定key值为时间戳
    2. ref="tree"
    3. :key="treeKey"
    4. :loading="tloading"
    5. :props="props"
    6. :data="treeData"
    7. :highlight-current="true"
    8. node-key="id"
    9. :check-strictly="true"
    10. show-checkbox
    11. :default-expanded-keys="showList"
    12. :render-content="drawingTreeNode"
    13. @check-change="treeCheckChange"
    14. @node-click="clickTree"
    15. />
    16. //2.在data中定义key值为时间戳
    17. data(){
    18. return{
    19. treeKey: new Date().getTime(),
    20. }
    21. }
    22. //3.在methods中定义刷新方法刷新key值即可
    23. methods:{
    24. refreshTree(){
    25. this.treeKey=+new Date()
    26. }
    27. }

     1.2、el-table

    点击修改按钮可将某一行部分字段设置为可编辑单元格。比较常见的方式就是使用一个变量动态决定是否可编辑。由于是树形表格的缘故,此时使用$set也会造成非响应式的问题

    因为树形表格的缘故,我们此时使用给表格行绑定key属性来解决

    如下图

     

     代码如下:

    1. // 1.给需要响应式的el-table-cloumn绑定key值
    2. "rowKey" prop="useSeries" :label="'适用车型'" min-width="120">
    3. <template slot-scope="scope">
    4. <span v-if="scope.row.flag">
    5. <el-select v-model="scope.row.useSeries " clearable placeholder="'">
    6. <el-option
    7. v-for="item in modelList"
    8. :key="item.ID_"
    9. :label="item.NUMBER_"
    10. :value="item.NUMBER_"
    11. />
    12. el-select>
    13. span>
    14. <span v-else>
    15. {{ scope.row.useSeries }}
    16. span>
    17. template>
    18. // 2.data中定义rowKey
    19. data() {
    20. rowKey: +new Date(),
    21. }
    22. // 3.修改方法刷新即可,因为我这里调用了接口查询对应可修改下拉数据所以写在接口返回之后
    23. methods:{
    24. queryRowPoint(id, row) {
    25. this.tableLoading = true
    26. getPoint({ stationId: id }).then(res => {
    27. this.pointObj[id] = res.resultlist || []
    28. this.rowKey = +new Date()
    29. }).finally(() => {
    30. this.tableLoading = false
    31. })
    32. },
    33. }

     还有一下应用场景使用方法差不多。当然可能不用刷新key也会很轻松解决问题,但是这可以是种思路进行拓展。因为代码都是在csdn的编辑器手写的所以版式可能不太正

  • 相关阅读:
    mysql- 锁:全局锁、表锁、行锁
    深入理解计算机系统——第五章 Optimizing Program Performance
    【音视频 | Ogg】libogg库详细介绍以及使用——附带libogg库解析.opus文件的C源码
    如何使用iPhone15在办公室观看家里电脑上的4k电影?
    Linux学习第35天:Linux LCD 驱动实验(二):星星之火可以燎原
    jvm 内存结构 ^_^
    公约数(也叫公因数)|公倍数 |小知识|Golang
    【C++进阶】map和set( 万字详解)—— 上篇
    excel表的筛选后自动求和
    基于stm32单片机随机数自动摇号抽奖系统
  • 原文地址:https://blog.csdn.net/m0_52765288/article/details/128037698