子组件想要修改自身的值不应该自己修改,应该通过事件触发给父组件让父组件来修改。
//父组件<template> <div> <Switch :value="y" @input=" y = value "/> <Switch :value="y" @update:value=" y = value "/> //可以简写为 <Switch v-model:value="y"/> </div></template><script lang="ts" >import Switch from '../lib/Switch1.vue'import { ref } from 'vue'export default { components: {Switch}, setup(){ const y = ref(false) return {y} }} </script>
//子组件<template> <button @click="toggle" :class="{checked:value}"> <span></span> </button></template><script lang="ts">import { ref } from 'vue'export default { props: { value: Boolean }, setup(props, context){ const toggle = ()=>{ context.emit('input', !props.value) 父组件改写为v-model写法后 emit触发事件必须为update: + props context.emit('update:value', !props.value) // this.$emit() } return {toggle} } }</script>