vue3 依赖注入provide/inject

建议在非父子(或不相关)组件传值时进行使用

场景:App.vue 引用了A组件,A组件中有引用了B组件,甚至B有引用了C组件等时,这些组件共同使用了一个值,建议使用provide/inject的方式进行传值。
注意:
  • 1 vue3 中可以使用v-bind方式绑定script里的变量
  • -2 在组件中更改inject传递过来的值,其它组件通过reject传递的值也会进行更改。

代码示例如下:

App.vue 组件:

<template>
  <div>App 引入A B 组件</div>
  <div class="test-provide"></div>
  <A></A>
</template>

<script setup lang="ts">
import { ref, provide } from 'vue';
// vue3中 组件引入后,可直接使用
import A from './A.vue'

const colorValue = ref<string>('red')

// 需要两个参数,类似于key,value
provide('color',colorValue)

</script>

<style lang="scss" scoped>
.test-provide {
   width:20px;
   height: 20px;
   background: v-bind(colorValue);
}

</style>

A.vue

<template>
  <div>
    A component
  </div>
  <div class="test-provide"></div>
  <B></B>
</template>

<script setup lang="ts" name="A">
import B from './B.vue'
import { inject } from 'vue'
// 引入 类型
import type {Ref} from 'vue'

// 由于App.vue 传递的是ref<String>类型,在inject接收的时候需增加泛型,要不会是unkonw类型
const colorValue = inject<Ref<String>>('color')
</script>

<style scoped>
.test-provide {
    width:20px;
    height: 20px;
    /* vue3 中可以使用v-bind方式绑定script里的变量 */
    background: v-bind(colorValue);

}
</style>

B.vue

<template>
  <div>
    B component
  </div>
  <div class="test-provide"></div>
  <button @click="updateColor">修改颜色值</button>
</template>

<script setup lang="ts" name="B">
import { inject } from 'vue'
import type {Ref} from 'vue'

const colorValue = inject<Ref<String>>('color')

// 可通过在组件中更改值,其它组件中的值也会进行更改
const updateColor = ()=>{
    colorValue.value = 'yellow'
}
</script>

<style scoped>
.test-provide {
    width:20px;
    height: 20px;
    background: v-bind(colorValue);

}
</style>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值