Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Vue 3如何观看地图_Javascript_Vue.js_Vue Component_Vuejs3_Vue Reactivity - Fatal编程技术网

Javascript Vue 3如何观看地图

Javascript Vue 3如何观看地图,javascript,vue.js,vue-component,vuejs3,vue-reactivity,Javascript,Vue.js,Vue Component,Vuejs3,Vue Reactivity,我将贴图传递给组件,然后发回新值并更新贴图。这会触发地图上的监视,但传递的旧值和新值是相同的 在这种情况下,是否可能有一只手表接收旧值 (函数(){ 常数ui={ 设置(){ 常数映射=反应(新映射([ [width',800], ['height',400] ])); 函数onCompUpdate(evt){ log(map.get('width')、map.get('height')、evt[0],evt[1]); 地图集('width',编号(evt[0]); 地图集('高度'),编号(e

我将贴图传递给组件,然后发回新值并更新贴图。这会触发地图上的监视,但传递的旧值和新值是相同的

在这种情况下,是否可能有一只手表接收旧值

(函数(){
常数ui={
设置(){
常数映射=反应(新映射([
[width',800],
['height',400]
]));
函数onCompUpdate(evt){
log(map.get('width')、map.get('height')、evt[0],evt[1]);
地图集('width',编号(evt[0]);
地图集('高度'),编号(evt[1]);
}
手表(地图,(n,o)=>{
console.log(n.get('width')、n.get('height'),
o、 get('width')、o.get('height');
});
返回{map,onCompUpdate};
},
};
const vueApp=createApp(ui);
vueApp.component('base-input'{
道具:['some'],发射:['comp-update'],
设置(道具,{emit}){
让chars=ref(Array.from(props.some.values()).join(',');
功能检查输入(val){
发射('comp-update',val.split(','));
chars.value=val;
}
返回{chars,checkInput};
},
模板:``
});
vueApp.mount(“#vue”);
})();
HTML:


小提琴:

发生这种情况是因为对旧的和新的引用是相同的。这里有一个解决办法。与其直接观察引用,不如观察引用的传播,它确实会发生变化。必须在函数表达式内执行,因为排列不是反应性的:

watch(()=>[…地图],(nArray,oArray)=>{
常数n=新地图(nArray);
常数o=新地图(oArray);
log(n.get('width')、n.get('height')、o.get('width')、o.get('height'));
});
由于排列将贴图转换为数组,因此可以在手表内部将值转换回贴图

这是你的