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

【deepseek解决不了的问题】vue2响应式数据在视图改变后被无感置空

问题描述

在 Vue2 开发过程中,遇到了一个关于数据监听和视图渲染的问题。在这段代码中,btnList 和 moreActionsList 只有在
config 发生变化时才会更新。当页面窗口大小发生变化时,config 和 btnList 都没有监听到数据变化,但是btnList
被清空了,而 config 的数据还在,视图无法正确展示。以下是相关的 watch 代码:

watch: {
  // 监听 config 数据变化,更新 btnList 和 moreActionsList
  config: {
    handler(newVal) {
      console.log(newVal, 'config watch');
      const newConfig = cloneDeep(newVal);
      const showList = newConfig?.filter(e => !e.hide);
      
      if (!showList || !showList?.length) {
        this.btnList = [];
        this.moreActionsList = [];
        return;
      }

      if (showList?.length <= this.maxButtonNum) {
        this.btnList = showList;
        this.moreActionsList = [];
      } else {
        this.btnList = showList.slice(0, this.maxButtonNum);
        this.moreActionsList = showList.slice(this.maxButtonNum);
      }
    },
    deep: true
  }
}

问题原因

当窗口大小变化时,页面的视图并没有触发更新,导致 config 和相关数据没有被重新计算。此时,btnList 和 moreActionsList 被错误地清空,而没有进行更新,从而导致它们为空数组,无法正确显示。
但是确实是没监听到变化,不太清楚是什么原因

解决方案

将 watch 中的逻辑封装成一个独立的方法,并在 mounted 生命周期钩子中调用该方法。这样可以确保在页面加载或窗口变化时,btnList 和 moreActionsList 能够重新渲染。

  • 步骤一:将 watch 逻辑封装成一个独立的方法

我们可以将 handler 方法中的逻辑提取成一个方法,方便在页面加载时和窗口变化时都能够触发该方法进行更新。

methods: {
  updateButtonList(config) {
    //--源watch中逻辑
  }
}
  • 步骤二:在 mounted 生命周期钩子中调用该方法

在 mounted 中调用该方法,可以确保组件加载时就会执行一次渲染,从而防止 btnList 和 moreActionsList 被清空。

mounted() {
  this.updateButtonList(this.config);
}

这样,我们就确保了在 config 数据发生变化时,btnList 和 moreActionsList 会得到正确的更新,而且在页面加载时,数据也能够被正确渲染。

相关文章:

  • 【Python LeetCode】面试经典 150 题
  • (九)axios的使用
  • .net websocket 使用
  • 机器学习3-聚类
  • 前端多个项目放在一个域名下如何配置打包文件
  • 【软件安装】CentOS7系统安装Python3和opencv-python库
  • C++ Qt常见面试题(3):Qt内存管理机制
  • 【爬虫基础】第二部分 爬虫基础理论 P1/3
  • 【MySQL篇】数据库基础
  • 国自然面上项目|基于肺癌精准靶向治疗的基因影像组学研究|基金申请·25-02-26
  • mongodb【实用教程】
  • Windows docker下载minio出现“Using default tag: latestError response from daemon”
  • 嵌入式开发--STM32的USB不识别和需要重新拔插的解决
  • Java 之集成 DataX 数据同步工具
  • Compose 手势处理,增进交互体验
  • Arcgis 实用制图技巧--如何制作“阴影”效果
  • 软件供应链安全工具链研究系列—RASP自适应威胁免疫平台(下篇)
  • 渗透测试【seacms V9】
  • 第十四届蓝桥杯Scratch11月stema选拔赛真题——小猫照镜子
  • For循环以及简单练习
  • 亮剑浦江丨上海网信部门处罚一批医疗服务类互联网企业,三大类问题值得关注
  • 马上评丨机械停车库成“僵尸库”,设计不能闭门造车
  • 永辉超市一季度净利降近八成,未来12个月至18个月是改革成果集中释放期
  • 破解160年基因谜题,我国科学家补上豌豆遗传研究最后拼图
  • 政治局会议:积极维护多边主义,反对单边霸凌行径
  • 湖南省郴州市统战部部长黄峥嵘主动交代问题,接受审查调查