vue3知识点:provide 与 inject

简介: vue3知识点:provide 与 inject

image.png

@[toc]

三、其它 Composition API(不常用,了解即可)

5.provide 与 inject

image.png

  • 作用:实现祖与后代组件间通信
  • 套路:父组件有一个 provide 选项来提供数据,后代组件有一个 inject 选项来开始使用这些数据
  • 具体写法:

1.祖组件中:

setup(){
   
    ......
    let car = reactive({
   name:'奔驰',price:'40万'})
    provide('car',car)
    ......
}

2.后代组件中:

setup(props,context){
   
    ......
    const car = inject('car')
    return {
   car}
    ......
}

注意点1:

provide函数:用于给自己的后代组件传递参数
provide('car',car),第1个参数为给你传入的参数起个名字,第2个参数为传入的参数。

inject函数:用于注入祖组件传递过来的参数
inject('car'),形参为传递过来的参数名字

注意点2:

const car = inject('car')
其中inject注入的参数返回值也是个Proxy类型的对象,如图打印car
image.png

注意点3:
provide 与 inject函数 只能用在由“祖组件” -> “子组件”传递参数,不能由子组件 -> 祖组件,且祖组件传递给子组件的参数只能使用,子组件不能修改传递过来的值,否则报错。

测试案例

完整代码

项目目录

image.png

main.js

//引入的不再是Vue构造函数了,引入的是一个名为createApp的工厂函数
import {
    createApp } from 'vue'
import App from './App.vue'

//创建应用实例对象——app(类似于之前Vue2中的vm,但app比vm更“轻”)
const app = createApp(App)

//挂载
app.mount('#app')

App.vue

<template>
    <div class="app">
        <h3>我是App组件(祖),{
   {
   name}}--{
   {
   price}}</h3>
        <Child/>
    </div>
</template>

<script>
    import {
    reactive,toRefs,provide } from 'vue'
    import Child from './components/Child.vue'
    export default {
   
        name:'App',
        components:{
   Child},
        setup(){
   
            let car = reactive({
   name:'奔驰',price:'40W'})
            provide('car',car) //给自己的后代组件传递数据
            return {
   ...toRefs(car)}
        }
    }
</script>

<style>
    .app{
   
        background-color: gray;
        padding: 10px;
    }
</style>

Child.vue

<template>
    <div class="child">
        <h3>我是Child组件(子)</h3>
        <Son/>
    </div>
</template>

<script>
    import {
   inject} from 'vue'
    import Son from './Son.vue'
    export default {
   
        name:'Child',
        components:{
   Son},
        /* setup(){
            let x = inject('car')
            console.log(x,'Child-----')
        } */
    }
</script>

<style>
    .child{
   
        background-color: skyblue;
        padding: 10px;
    }
</style>

Son.vue

<template>
    <div class="son">
        <h3>我是Son组件(孙),{
   {
   car.name}}--{
   {
   car.price}}</h3>
    </div>
</template>

<script>
    import {
   inject} from 'vue'
    export default {
   
        name:'Son',
        setup(){
   
            let car = inject('car')
            return {
   car}
        }
    }
</script>

<style>
    .son{
   
        background-color: orange;
        padding: 10px;
    }
</style>

结果展示:

image.png

本人其他相关文章链接

1.《vue3第三章》其它 Composition API(不常用,了解即可),包括shallowReactive 与 shallowRef、readonly 与 shallowReadonly等等
2.vue3知识点:shallowReactive 与 shallowRef
3.vue3知识点:readonly 与 shallowReadonly
4.vue3知识点:toRaw 与 markRaw
5.vue3知识点:customRef
6.vue3知识点:provide 与 inject
7.vue3知识点:响应式数据的判断

目录
相关文章
|
5天前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
107 64
|
5天前
|
JavaScript 前端开发 API
Vue 3 中 v-model 与 Vue 2 中 v-model 的区别是什么?
总的来说,Vue 3 中的 `v-model` 在灵活性、与组合式 API 的结合、对自定义组件的支持等方面都有了明显的提升和改进,使其更适应现代前端开发的需求和趋势。但需要注意的是,在迁移过程中可能需要对一些代码进行调整和适配。
|
27天前
|
JavaScript 前端开发 开发者
Vue 3中的Proxy
【10月更文挑战第23天】Vue 3中的`Proxy`为响应式系统带来了更强大、更灵活的功能,解决了Vue 2中响应式系统的一些局限性,同时在性能方面也有一定的提升,为开发者提供了更好的开发体验和性能保障。
54 7
|
28天前
|
前端开发 数据库
芋道框架审批流如何实现(Cloud+Vue3)
芋道框架审批流如何实现(Cloud+Vue3)
47 3
|
27天前
|
JavaScript 数据管理 Java
在 Vue 3 中使用 Proxy 实现数据双向绑定的性能如何?
【10月更文挑战第23天】Vue 3中使用Proxy实现数据双向绑定在多个方面都带来了性能的提升,从更高效的响应式追踪、更好的初始化性能、对数组操作的优化到更优的内存管理等,使得Vue 3在处理复杂的应用场景和大量数据时能够更加高效和稳定地运行。
43 1
|
27天前
|
JavaScript 开发者
在 Vue 3 中使用 Proxy 实现数据的双向绑定
【10月更文挑战第23天】Vue 3利用 `Proxy` 实现了数据的双向绑定,无论是使用内置的指令如 `v-model`,还是通过自定义事件或自定义指令,都能够方便地实现数据与视图之间的双向交互,满足不同场景下的开发需求。
47 1
|
29天前
|
前端开发 JavaScript
简记 Vue3(一)—— setup、ref、reactive、toRefs、toRef
简记 Vue3(一)—— setup、ref、reactive、toRefs、toRef
|
JavaScript 索引 前端开发
vue知识点列表
vue基础 Vue 特点 Vue 实例 插值表达式 {{}} 指令: v-bind, v-if, v-for, v-model, v-on 使用组件构建应用 Vue 实力属性和方法 实例生命周期 模板语法与绑定 过滤器 Filter 计算属性 com...
1063 0
|
11天前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
27 1
vue学习第四章
|
11天前
|
JavaScript 前端开发
vue学习第九章(v-model)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生,自学前端2年半,正向全栈进发。此篇介绍v-model在不同表单元素中的应用及修饰符的使用,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
23 1
vue学习第九章(v-model)