Vue3$Data-ProvideAndInject

82 阅读1分钟

Vue3$Data-ProvideAndInject

0. Provide and Inject in Big Picture

父组件给子组件传参数,使用 props。

祖先组件给后代组件传参数,使用 provideinject。(也可以父子)

1. provide 提供数据

<script setup>
import { provide } from 'vue'

provide(/* key */ 'message', /* value */ 'hello!') // key: String / Symbol
</script>

App-level Provide

import { createApp } from 'vue'
const app = createApp({})

app.provide(/* key */ 'message', /* value */ 'hello!')

2. inject 接受数据

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

const message = inject('message')
</script>

Default Values

const value = inject('message', 'default value')
const value = inject('key', () => new ExpensiveClass(), true) // factory function

3. Best Practices

改变数据的方法要和数据放在一起,一起provide

可以通过readonly防止数据被误改。

<script setup>
import { ref, provide, readonly } from 'vue'

const count = ref(0)
provide('read-only-count', readonly(count))
</script>

Links

VueProvideInject