vue.js - 当对象没有(可识别的)更改时触发 Vue watch
问题描述
我有一个在 vue 中观察的对象,目的是在检测到更改时执行操作。有些东西一直在触发它,但是当我将对象打印到控制台并将 oldVal 与 newVal 进行比较时,它们看起来是相同的。
只需查看记录到控制台的对象,我的眼睛就没有发现任何差异,所以我认为通过对它们进行字符串化并在文本比较工具中进行比较,我会发现差异,但是对于这样的代码,结果也是相同的:
watch: {
CCompPrefs: function (newVal, oldVal) {
console.log('CC changed: ', JSON.stringify(newVal), ' | was: ', JSON.stringify(oldVal))
}
},
虽然不明白为什么如果对象中没有任何变化,手表会被触发,但我认为做这样的事情是安全的:
watch: {
CCompPrefs: function (newVal, oldVal) {
if (newVal !== oldVal) {
console.log('CC CHANGED, OLD VAL DIFFERENT')
}
}
},
但是日志运行了,尽管我找不到明显的区别!
所以我通过这样做找到了一个可行的解决方案:
watch: {
CCompPrefs: function (newVal, oldVal) {
if (JSON.stringify(newVal) !== JSON.stringify(oldVal)) {
console.log('CC CHANGED, OLD VAL DIFFERENT')
}
}
},
但这仍然给我留下了一个挥之不去的问题,即为什么会首先触发它。什么可能会改变,为什么?
补充资料
CCompPrefs
通过以下方式通过计算元素来:
computed: {
CCompPrefs () {
return this.$store.state[this.$attrs.useCase].filter(x => (x.show === true && x.enabled === true))
},
}
- 几乎任何动作似乎都会触发这款手表。就像抛出模型窗口一样。
- 使用 Vue devtools,我可以验证 vuex 存储的任何部分都没有应用任何突变
更新
现在我想知道this.$attrs.useCase
我上面的计算值是否可能是罪魁祸首。我正在打开的模式位于父容器中,也许会切换该值的上下文并强制更新?现在仔细看...
更新2
没有。this.$attrs.useCase
不会改变。仍然很困惑,什么会触发这个观察者?
解决方案
推荐阅读
- r - 我在 R 中的 Deseq2 包中工作并尝试使用 write.csv(dataframe, file="file.csv") 导出数据,但无法获取文件中的数据
- charts - 谷歌图表 - 条形相互堆叠(重叠),而不是相互叠加
- ajax - 简单的 AJAX CALL 并在新的标签丢失帖子值中打开页面
- git - 如何配置 git 以显示日志图而不包装长提交消息
- file-permissions - Rsync:跳过设置了粘性位的文件
- indexing - 如何为 INDEX MATCH 函数使用两列中的一种选择?
- python - 在 PyGame 中移动对象并采用单个输入
- javascript - 单击 javascript 或 iframe 广告以显示按钮?
- javascript - 如何使用 AXIOS 向我的 NodeJS 服务器发送 POST 请求?
- swift - 我该如何解决这个混合枚举相等的东西?