You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue.js中watch使用问题:添加新ticker时watch未触发仅刷新后生效

问题原因

Vue的watch默认是浅监听机制:当你用push这类数组变异方法给tickers添加元素时,数组本身的引用地址并没有发生改变,所以watch不会触发回调。虽然Vue的响应式系统能识别数组变异方法并更新视图,但watch的浅监听只会检测到数组引用的变化,对内部元素的增减无感知。

解决办法

提供两种常用方案,按需选择:

方案1:开启深度监听

给watch配置deep: true,让它能检测数组内部的变化:

watch: {
  tickers: {
    handler() {
      localStorage.setItem("crypto-list", JSON.stringify(this.tickers));
      localStorage.setItem("crypto-name-list", JSON.stringify(this.namesT));
      console.log('Add to localStorage');
    },
    deep: true
  }
}

这种方案适合需要监听数组内对象属性变化的场景,但会有一定性能开销。

方案2:替换数组引用

修改addClick方法,通过创建新数组的方式更新tickers和namesT,让数组引用发生改变:

addClick() {
  const currentTicker = {
    name: this.ticker,
    price: "25",
  };
  const upperName = currentTicker.name.toUpperCase();

  if (!this.namesT.includes(upperName)) {
    this.exist = false;
    // 用扩展运算符创建新数组
    this.namesT = [...this.namesT, upperName];
    this.tickers = [...this.tickers, currentTicker];
    console.log(this.namesT);
    console.log('add Ticker');
    this.updateInterval(currentTicker.name);
  } else {
    console.log("This name already exist");
    this.exist = true;
  }
}

这种方式更轻量,只是单纯添加元素的话推荐用这个方案,不需要额外配置watch。

内容的提问来源于stack exchange,提问作者fetixzz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 10:27:24