gpt4 book ai didi

javascript - Vue 3 如何观看 map

转载 作者:行者123 更新时间:2023-12-04 08:27:03 25 4
gpt4 key购买 nike

我将映射传递给组件,然后发出新值并更新映射。这会触发 map 上的 watch ,但传递的新旧值是相同的。
在这种情况下,是否有可能让 watch 接收旧值?

(function() {

const ui = {
setup() {
const map = reactive(new Map([
['width', 800],
['height', 400]
]));

function onCompUpdate(evt) {
console.log(map.get('width'), map.get('height'), evt[0], evt[1]);
map.set('width', Number(evt[0]));
map.set('height', Number(evt[1]));
}

watch(map, (n,o)=>{
console.log(n.get('width'), n.get('height'),
o.get('width'), o.get('height'));
});

return { map, onCompUpdate };
},
};

const vueApp = createApp(ui);

vueApp.component('base-input', {
props: ['some' ], emits: ['comp-update'],
setup(props, { emit }) {

let chars = ref(Array.from(props.some.values()).join(','));

function checkInput(val) {
emit('comp-update', val.split(','));
chars.value = val;
}

return { chars, checkInput };
},
template: `<input type="text" spellcheck="false" :value="chars"
input="checkInput($event.target.value)"/>`
});

vueApp.mount('#vue');

})();
HTML:
<div id="vue">
<base-input :some="map" @comp-update="onCompUpdate($event)"></base-input>
</div>
fiddle :
https://jsfiddle.net/tfoller/sm28u7r0/35/

最佳答案

只有在整个 map 被替换时才会触发 watch 。如果要观看突变(添加/删除项目),您需要设置deep: true像这样:

watch(myMap, () => {
// myMap was mutated
}, { deep: true })
Working SFC Playground example

关于javascript - Vue 3 如何观看 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65207909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com