Vue3.2 provide inject 祖孙组件传值,响应式

介绍

vue3.2provideinject 的用法和 vue2 中用法相似;只不过在vue3.2中 为了增加响应式数据的处理,我们可以在定义值的时候使用 ref 或者 reactive;
在这里,由于我要传递的数据较多,一个个的去通过ref或者 reactive 定义值,代码量会很多,所以这里直接使用一个 reactive 定义一个 state对象,将所有需要使用的数据都存放在这个对象里,取值的时候通过 state.value 去取值即可。
在这里通过祖父组件,将 state对象里的某个值,传递给孙子组件;会发现无法响应式,解决方案如下:

祖父组件代码:

<template>
<father/>
</template>
<script setup>
important Father from './Father.vue';  //导入父组件
import { provide, reactive} from 'vue'
const state = reactive({
	name: "lisa",
	age: "18",
});
// 方法一: 将state里的值全部传递给子组件
provide('state',state);
// 方法二: 通过computed 计算属性实现响应式
provide('name', computed(() => {
  return state.name
}));
</script>

子组件代码:

<template>
<div class="son">{{state.name}}</div>
</template>
<script setup>
import { inject } from 'vue'
// 通过 inject 接收祖父组件传递过来的state对象;
const state = inject("state");
</script>
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3.2中,可以使用props和emit来实现子父组件之间的。 首先,在父组件中,通过props将数据递给子组件。在子组件中,使用接收到的props数据进行相应的操作。 父组件示例: ```html <template> <div> <ChildComponent :message="parentMessage" @update-message="updateParentMessage" /> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { data() { return { parentMessage: 'Hello from parent component', }; }, components: { ChildComponent, }, methods: { updateParentMessage(newMessage) { this.parentMessage = newMessage; }, }, }; </script> ``` 子组件示例: ```html <template> <div> <p>{{ message }}</p> <button @click="updateMessage">Update Message</button> </div> </template> <script> export default { props: { message: { type: String, required: true, }, }, methods: { updateMessage() { const newMessage = 'Updated message from child component'; this.$emit('update-message', newMessage); }, }, }; </script> ``` 在父组件中,我们使用`:message="parentMessage"`将`parentMessage`作为props递给子组件。子组件中通过props接收到父组件递的`message`,并显示在模板中。 子组件中的按钮点击事件`updateMessage`会触发`this.$emit('update-message', newMessage)`,将新的消息通过自定义事件`update-message`递给父组件。 在父组件中,我们定义了`updateParentMessage`方法来接收子组件递的新消息,并更新`parentMessage`的。 这样,就实现了父组件向子组件递数据,并且子组件可以通过自定义事件将新的数据递给父组件

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值