【Vue.js 3.0】provide 、inject 函数详解-1. 示例

时间:2024-12-18 08:00:55

1.1 provide

provide 函数用于在祖先组件中定义一个值,使得其所有后代组件都可以使用 inject 来访问这个值。

用法

provide(key, value)
  • key:一个字符串或 Symbol,用于唯一标识所提供的值。
  • value:所提供的值,可以是任何类型。

1.2 inject

inject 函数用于在后代组件中访问祖先组件通过 provide 所提供的值。

用法

const value = inject(key, defaultValue)
  • key:与 provide 相同的字符串或 Symbol。
  • defaultValue:一个可选的默认值,当 provide 没有提供该 key 对应的值时,inject 将返回这个默认值。

假设我们有一个祖先组件 GrandParent,一个中间组件 Parent,以及一个后代组件 Child。我们希望从 GrandParent 传递一个数据到 Child

GrandParent.vue
<template>
  <Parent />
</template>

<script setup>
import { provide } from 'vue';
import Parent from './Parent.vue';

const theme = 'dark';
provide('theme', theme);
</script>
Parent.vue
<template>
  <Child />
</template>

<script setup>
import Child from './Child.vue';
</script>
Child.vue
<template>
  <div :class="theme">
    I am a child component with {{ theme }} theme.
  </div>
</template>

<script setup>
import { inject } from 'vue';

const theme = inject('theme', 'light'); // 'light' 是默认值,如果 provide 没有提供 'theme'
</script>

<style scoped>
.dark {
  background-color: black;
  color: white;
}

.light {
  background-color: white;
  color: black;
}
</style>