在 vue2 里面:
// 父组件
<template>
<ComponentA v-bind.sync="obj" />
</template>
<script>
data() {
return {
obj: {a: 1, b: 2}
}
}
</script>
// 然后在子组件 ComponentA 里面直接去拿 a 和 b 就好了,就相当于是 v-bind 把 obj 拆开了,添加了.sync 修饰符又能同步修改
props: ['a', 'b']
如果按照 vue3 的写法:
// 父组件
<template>
<ComponentA v-model:obj="obj" v-model:c="c" />
</template>
<script setup lang="ts">
import { reactive, ref } from 'vue';
const obj = reactive({
a: 1,
b: 2
});
const c = ref(0)
</script>
// 子组件
<script setup lang="ts">
const props = defineProps<{
obj: {
a: number;
b: number;
};
c: number;
}>();
const emit = defineEmits(['update:obj', 'update:c']);
function syncEdit() {
emit('update:obj', { a: 2, b: 1 }); // 这个没有作用
emit('update:c', 2); // 这个起作用了
}
</script>
现在遇到了两问题,求大佬们解答一下:
1.如何在 vue3 里面把 obj 拆开,并且实现类似于.sync 的效果
2.为什么 v-model:xxx="xxx",当 xxx 为 reactive 定义的时候不能同步修改,而 ref 可以
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.