【发布时间】:2021-03-20 07:19:04
【问题描述】:
我将映射传递给组件,然后返回新值并更新映射。这会触发地图上的手表,但传递的新旧值是相同的。
在这种情况下是否有可能让手表接收旧值?
(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>
【问题讨论】:
标签: javascript vue.js vue-component vuejs3 vue-reactivity