vue3 defineProps传值使用 ref 响应式失效

21 篇文章 0 订阅

子组件接收父组件的传参。

父组件:

<template>
	<Son :data="data"/>
</template>
<script setup>
import { ref } from "vue";
let data = ref('hello')
setTimeout(() => {
	data.value = 'how are you doing'
}, 2000)

</script>

子组件:

<template>
	<div>{{ msg }}</div>
</template>
<script setup>
import { ref } from "vue";
// 接受来自父组件的传参
const props = defineProps({
  data: String,
});
const msg = ref(props.data);

</script>

此时父组件改变 data 的值,子组件 msg 无法响应 data 的变化。
因为 ref 是对传入数据的拷贝,原始值 data 的改变并不影响 msg
toRef 是对传入数据的引用,原始值 data 改变会影响 msg

正确做法:

<template>
	<div>{{ msg }}</div>
	<div>{{ data }}</div>
</template>
<script setup>
import { ref, toRefs, toRef } from "vue";
// 接受来自父组件的传参
const props = defineProps({
  data: String,
});
// 方法1:
const msg = toRef(props, 'data');
// 方法2:
const { data } = toRefs(props);

</script>

官网说明
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3中,可以通过使用props属性来实现父组件向子组件,并且让子组件对这些进行响应更新。 首先,在父组件中定义需要递给子组件的属性。在子组件中,通过props属性接收这些属性。可以使用v-bind指令将父组件的属性绑定到子组件的props上。这样,在父组件中修改这些属性的时,子组件也会相应地更新。 下面是一个简单的示例代码: 父组件: ```vue <template> <div> <ChildComponent :message="message" /> <button @click="changeMessage">Change Message</button> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, data() { return { message: 'Hello from parent component' }; }, methods: { changeMessage() { this.message = 'New message from parent component'; } } }; </script> ``` 子组件: ```vue <template> <div> <p>{{ message }}</p> </div> </template> <script> export default { props: { message: { type: String, required: true } } }; </script> ``` 在这个例子中,父组件通过props属性将message属性递给子组件。子组件接收到这个属性后,可以在模板中使用它,并且当父组件修改message的时,子组件会自动更新。 需要注意的是,在Vue 3中,props属性是只读的。如果需要在子组件中修改这些属性的,并让父组件也能收到更新,可以使用emit事件来向父组件发送消息,然后在父组件中处理这个事件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值