vue第一次监听的值和第二次监听的值是一样,也要执行if判断里面的代码
watch(
() => props.logDate,
(newVal, oldVal) => {
if (newVal !== oldVal) {
form.analysisTime = newVal.split(':').slice(0, 1).join(':');
}
},{ immediate: true, deep: true }
);
vue第一次监听的值和第二次监听的值是一样,也要执行if判断里面的代码
watch(
() => props.logDate,
(newVal, oldVal) => {
if (newVal !== oldVal) {
form.analysisTime = newVal.split(':').slice(0, 1).join(':');
}
},{ immediate: true, deep: true }
);
下午好🌅🌅🌅
本答案参考通义千问
你提到的问题是:在 Vue 中,使用 watch 监听一个值(如 props.logDate),即使第一次和第二次监听的值相同,也想要执行 if 判断中的代码。
在默认情况下,Vue 的 watch 只会在 值发生变化时 才会触发回调函数。也就是说,如果 newVal === oldVal,就不会进入 if (newVal !== oldVal) 的判断逻辑中。
但你希望的是:即使两次值相同,也要执行 if 判断内的代码。
为了实现这个需求,你可以通过以下方式来解决:
watch 回调虽然 watch 默认不会在值未变化时触发,但我们可以通过手动调用一次 watch 的回调函数,来达到“即使值不变也要执行”的效果。
watch(
() => props.logDate,
(newVal, oldVal) => {
// 强制执行这里的逻辑,不管是否变化
form.analysisTime = newVal.split(':').slice(0, 1).join(':');
},
{ immediate: true }
);
注意: 这里去掉了
newVal !== oldVal的判断,无论值是否变化都会执行。
immediate: true 并结合 deep: true如果你确实需要判断值是否变化,但又想在初始时就执行一次逻辑,可以这样处理:
watch(
() => props.logDate,
(newVal, oldVal) => {
// 即使值相同,也执行一次
form.analysisTime = newVal.split(':').slice(0, 1).join(':');
},
{ immediate: true, deep: true }
);
说明:
immediate: true 表示在 watch 初始化时就会执行一次回调。deep: true 用于深度监听对象或数组等复杂类型的变化(如果 props.logDate 是对象或数组)。watch 只在值变化时触发回调。newVal !== oldVal 的判断。immediate: true。deep: true。watch(
() => props.logDate,
(newVal, oldVal) => {
// 不管值是否变化,都执行该逻辑
form.analysisTime = newVal.split(':').slice(0, 1).join(':');
},
{ immediate: true, deep: true } // 根据实际数据类型决定是否开启 deep
);
如有更多关于 Vue 响应式机制的问题,欢迎继续提问!