当前位置: 首页 > news >正文

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

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

原因分析

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

解决办法

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

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 节点的删除自动清理,需要在数据更新时手动处理。

相关文章:

  • 【蓝桥杯速成】| 14.背包归来
  • C#中如何实现读写分离
  • 使用 SQL CTE(公共表表达式)优化数据查询的实践
  • 文件的打开与关闭
  • 【MATLAB例程】三维环境下,动态轨迹的AOA定位与UKF滤波,模拟IMU/AOA的数据融合(AOA的测角基站数量可自适应,目标运动轨迹可自行修改)
  • 蓝桥杯day1-时间问题
  • 设计模式(创建型)- 原型模式
  • Transformer | 一文了解:缩放、批量、多头、掩码、交叉注意力机制(Attention)
  • 计算机视觉算法实战——手术导航:技术、应用与未来
  • PySimpleGUI安装老版本,给软件链接,免费用,教程
  • NO.58十六届蓝桥杯备战|基础算法-枚举|普通枚举|二进制枚举|铺地毯|回文日期|扫雷|子集|费解的开关|Even Parity(C++)
  • 二分查找模板--从题目中讲解三大二分模板
  • 谈谈对spring IOC的理解,原理和实现
  • 【大模型】数字人 Sonic 的环境配置和使用
  • HDR(HDR10/ HLG),SDR
  • Appium 入门操作指南
  • 无耳 Solon v3.1.1 发布(兼容 Java 24)
  • 3-2RYU控制器应用程序开发(一)
  • 如何从零构建Spring Boot Starter并实现整合
  • 【c++深入系列】:类与对象详解(上)
  • 企业注册阿里账号网站建设/网页设计规范
  • bbc实验是哪个网站做的/濮阳网站推广
  • 三只松鼠网站怎样做/网络营销课程培训课程
  • 做外贸网站服务器要选择哪里的/网站外链怎么发布
  • 什么是网站建设流程/外链网盘网站
  • 济南网站建设培训班/电商运营自学全套教程