原理如下:
参考
解决过程:
①用了watch来监听,但是没有触发watch
使用 watch 监听 props.dataDetial,但是无法获取到值,可能是因为 props.dataDetial 的初始值是 undefined,而 watch 默认不会立即执行。
②添加 { immediate: true } 选项,但是获取到的是空的
在 watch 中观察的对象数组在初始阶段是空的,可能是因为该数组是异步获取的,而在 watch 的初始执行时,数据还未完全加载完成。
可以使用 deep: true 选项来深度观察对象的变化。这样,在初始执行 watch 时,即使对象数组是空的,当数据加载完成后,仍然能够触发 watch
③添加 { deep: true } 选项,成功
通过debugger可以看到,第一次watch到的是空的,但是紧接着又watch了第二次成功获取到数据
watch(() => props.dataDetial, (newValue, oldValue) => {
const matchedItem = recordType.value.find((item) => item.id === props.dataDetial.basicInformation.type);
if (matchedItem) {
eventType.value = matchedItem.typeName;
}
}, { immediate: true, deep: true });
所以没有特殊情况,随时带上{ immediate: true, deep: true }还是很有用的