在子组件中改变 prop?
2023-08-01
231
我有一个接收活动状态的组件,因此在父组件中:
<ChildComponent :active="active" />
然后在
ChildComponent
中将其作为 prop 接收。虽然,当
ParentComponent
中的
active
更新时,我希望
ChildComponent
也更新,因此我不得不像这样声明它:
const props = defineProps(['active']);
const isActive = computed(() => props.active);
这有效,当
ParentComponent
更改
active
时,它会传递给
ChildComponent
。
但在
ChildComponent
中,我也需要改变
active
,我该怎么做?
1个回答
为了让 ChildComponent 既能从 ParentComponent 接收 active prop,又能在需要时对其进行更新,您可以在 ChildComponent 中结合使用 defineProps、defineEmits 和 emit 函数。
以下是实现方法:
在 ParentComponent 中:
enter code here
<template>
<ChildComponent :active="active" @updateActive="updateActive" />
</template>
<script>
import { ref } from 'vue';
import ChildComponent from './ChildComponent.vue';
export default {
components: {
ChildComponent,
},
data() {
return {
active: false, // Your initial value for active
};
},
methods: {
updateActive(value) {
this.active = value; // Update the active value from the ChildComponent
},
},
};
</script>
在 ChildComponent 中:
<template>
<div>
<p>Active: {{ isActive }}</p>
<button @click="toggleActive">Toggle Active</button>
</div>
</template>
<script>
import { defineProps, defineEmits } from 'vue';
export default {
props: {
active: Boolean, // Declare the active prop
},
setup(props) {
const isActive = ref(props.active); // Create a local ref for active
// Emit an event to update active in the ParentComponent
const emitUpdateActive = (value) => {
emit('updateActive', value);
};
// Function to toggle the active state and emit the update
const toggleActive = () => {
isActive.value = !isActive.value;
emitUpdateActive(isActive.value);
};
// Expose the isActive and toggleActive function to the template
return {
isActive,
toggleActive,
};
},
emits: ['updateActive'], // Declare the custom event
};
</script>
通过此设置,ChildComponent 可从 ParentComponent 接收 active prop,并且还能够在调用 toggleActive 函数时对其进行变异。updateActive 事件从 ChildComponent 发送到 ParentComponent,从而允许 ParentComponent 相应地更新其 active 值。
Nalaka Sampath
2023-08-01