用数组遍历出来的页面,随节点创建的ref存储在数据仓库中,如果数据删除,页面相关节点也会删除,数据仓库中随节点创建的ref会不会也同时删除

在 Vue.js 里,当使用数组遍历渲染页面元素并把 ref 存储到数据仓库(例如使用 Pinia 作为状态管理库)时,若数组数据删除使得页面上相关 DOM 节点移除,数据仓库里对应的 ref 不会自动删除。下面详细说明原因及解决办法。

原因分析

  • 数据仓库的独立性:数据仓库(如 Pinia)是独立于 DOM 的状态管理系统,它不会自动感知 DOM 节点的变化。即便 DOM 节点被移除,数据仓库里存储的 ref 依然存在。
  • Vue 的响应式更新:Vue 的响应式系统主要关注数据的变化并更新 DOM,但不会自动清理数据仓库里的 ref。

解决办法

要保证数据仓库里的 ref 和页面上的 DOM 节点同步,需要在数据更新时手动清理 ref。以下是一个示例:

javascript 复制代码
import { defineStore } from 'pinia';

export const useSlideState = defineStore('slideState', {
    state: () => ({
        allDataObj: [
            { title: '本人信息', id: 0, flag: 1, comIndex: 1 },
            { title: '家庭信息', id: 1, flag: 1, comIndex: 2 },
            { title: '工作信息', id: 2, flag: 1, comIndex: 3 },
            { title: '其他信息', id: 3, flag: 1, comIndex: 4 },
        ],
        slideFlag: { table1: 0, table2: 0, table3: 0, table4: 0 },
        slideState: {
            table1: 0,
            table2: 0,
            table3: 0,
            table4: 0,
        },
        all: {
            table1: [{ a: 1, b: 2 }, { c: 3, d: 4 }],
            table2: [{ a: 1, b: 3 }]
        },
        // 假设这里存储 ref
        itemRefs: [] 
    }),
    actions: {
        removeItem(index) {
            // 删除数组中的数据
            this.allDataObj.splice(index, 1); 
            // 手动清理对应的 ref
            this.itemRefs.splice(index, 1); 
        }
    }
});

代码解释

  • itemRefs:在状态里添加一个数组 itemRefs 来存储 ref。
  • removeItem 方法:在删除 allDataObj 数组里的数据时,同时使用 splice 方法删除 itemRefs 数组中对应位置的 ref。

总结

数据仓库里存储的 ref 不会随 DOM 节点的删除自动清理,需要在数据更新时手动处理。

相关推荐
yyf9601261 天前
hiveserver2与beeline进行远程连接hive配置及遇到的问题
数据仓库·hive
jiedaodezhuti1 天前
hive两个表不同数据类型字段关联引发的数据倾斜
数据仓库·hive·hadoop
IvanCodes1 天前
五、Hive表类型、分区及数据加载
大数据·数据仓库·hive
镜舟科技1 天前
什么是数据集市(Data Mart)?
数据仓库·olap·数据集市·多维数据模型·在线分析处理·定制化数据
SelectDB技术团队2 天前
顺丰科技:从 Presto 到 Doris 湖仓构架升级,提速 3 倍,降本 48%
大数据·数据库·数据仓库·信息可视化·数据分析·doris·实时分析
Microsoft Word2 天前
数据仓库Hive
数据仓库·hive·hadoop
RestCloud3 天前
ETL交通行业案例丨某大型铁路运输集团ETL数据集成实践
数据仓库·etl·数字化转型·集成平台
chat2tomorrow3 天前
数据中台建设系列(五):SQL2API驱动的数据共享与服务化实践
大数据·数据库·数据仓库·sql·数据治理·数据中台·sql2api
IvanCodes3 天前
一、数据仓库基石:核心理论、分层艺术与 ETL/ELT 之辨
大数据·数据仓库·hive·etl
SelectDB技术团队3 天前
可观测性方案怎么选?SelectDB vs Elasticsearch vs ClickHouse
大数据·数据仓库·clickhouse·elasticsearch·信息可视化·doris·半结构化