在 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 可以
