vue3中使用computed和Proxy编写v-model语法糖
import { computed } from "vue";
const useVModel = (props, propName, emit) => {
const model = computed({
get() {
const proxy = new Proxy(props[propName], {
get(target, key) {
return Reflect.get(target, key);
},
set(target, key, value) {
emit("update" + propName, {
...target,
[key]: value
});
return true;
}
});
return proxy;
},
set(val: any) {
emit("update:" + propName, val);
}
});
return model;
};
export default useVModel;