刘勇虎的官方网站
网站内容包含大前端、服务器开发、Python开发、iOS开发、Android开发、网站维护等技术文章。专注于分享技术经验,职业心得体会,IT优秀文章与教程创作。
Stay hungry,Stay foolish,Stay young
javascript import { computed, watch } from 'vue'; // 通过计算属性生成深拷贝副本 const arrayCopy = computed(() => JSON.parse(JSON.stringify(obj.arrayProp))); watch(arrayCopy, (newVal, oldVal) => { console.log('差异对比:', newVal, oldVal); // 此时新旧值不同 });
javascript // 监听数组第0个元素的特定属性 watch( () => obj.arrayProp[0]?.id, (newVal, oldVal) => { console.log('元素变化:', newVal, oldVal); } ); // 监听整个数组的特定属性集合 watch( () => obj.arrayProp.map(item => item.id), (newIds, oldIds) => { console.log('ID集合变化:', newIds, oldIds); } );
javascript watchEffect(() => { const currentArray = [...obj.arrayProp]; // 创建副本 // 自动追踪所有被使用的属性 console.log('数组变更:', currentArray); });
javascript let oldValue = null; watch( () => [...obj.arrayProp], // 创建副本 (newVal) => { console.log('旧值:', oldValue); console.log('新值:', newVal); oldValue = [...newVal]; // 手动更新旧值 }, { deep: true } );
javascript import { cloneDeep } from 'lodash-es'; watch( () => cloneDeep(obj.arrayProp), (newVal, oldVal) => { console.log('深度对比:', newVal, oldVal); }, { deep: true } );
选择建议:
所有方案都需配合
{ deep: true }
深度监听配置,注意深拷贝可能带来的性能损耗,建议根据数据规模选择合适的方案。如果仅需检测变化无需旧值,可直接使用watch(() => [...obj.arrayProp], handler)
简化实现。