vue中的provide/inject具体使用

隔了很长一段时间才更新。

因为这段时间换了个地方搬砖,事情比较多,需要熟悉公司的各个项目涉及到的业务和代码,所以才没更新。

从今天开始准备慢慢恢复更新,争取一周分享一篇自己学习的心得。新坑主要技术栈是以vue为主,所以分享的内容主要也是以vue为主。随着形势的发展,前端行业对于从业人员来说要求也会越来越高,我们只要不断的充实自己,才能让自己多一份御寒的能力。

闲话少叙,进入正题。

今天主要是要分享一下关于provide/inject的用法:

先看官网关于provide/inject的定义:

 

 

 简单的使用方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// app.vue
<script>
import Child from './Child.vue'
 
export default {
  components: { Child },
  provide() {
    return {
      //简单写法 
      message: 'hello1',
    }
  },
  methods:{
    handleClick() {
      this.message2 = 'message2 is change';
      console.log(this.message2)
    }
  }
}
</script>
 
<template>
  <Child />
  <button @click="handleClick">点我改变值</button>
</template>
 
// Child.vue
<script>
import GrandChild from './GrandChild.vue'
 
export default {
  components: {
    GrandChild
  }
}
</script>
 
<template>
  <GrandChild />
</template>
//GrandChild.vue
<script>
import GrandChild from './GrandChild.vue'
 
export default {
  // inject:['message', 'message2','message3'] 数组形式写法
  // 当声明注入的默认值时
  // 必须使用对象形式
  inject: {
    localMessage:{
      from:"message", // 如果与原注入属性名相同时,该属性是可选的
      default: ""
    },
    message2:{
      from:"message2",
    },
    message3:{
      from:"message3",
      default:"message default value" // 默认值写法
    }
  },
}
</script>
 
<template>
  <p>
    Message to grand child: {{ localMessage }}
    <br/>
    Message to grand child: {{ message2 }}
    <br/>
    Message to grand child: {{ message3 }}
  </p>
</template>
    

  

数据响应式的使用方式:

该方式只需要修改一些提供依赖源即可,修改如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// app.vue
<script>
import { computed } from 'vue'
import Child from './Child.vue'
 
export default {
  components: { Child },
  data(){
    return {
      message2:"this is  message2"
    }
  },
  provide() {
    return {
      // 数据响应式写法
      message2: computed(() => this.message2)
    }
  },
  methods:{
    handleClick() {
      this.message2 = 'message2 is change';
      console.log(this.message2)
    }
  }
}
</script>
 
<template>
  <Child />
  <button @click="handleClick">点我改变值</button>
</template> 

总结:

provide和inject是配套使用的,provide在祖先组件或者应用根组件提供依赖源,该条组件链的组件都可以通过inject注入provide提供的值。可以用在祖先组件和后代组件的通信上面,避免使用props层层传递的麻烦。

当然,平时开发过程遇到祖先组件和后代组件通信的问题,可能更多的是采用vuex来解决。provide/inject使用较多的场景在高阶组件或者插件上面。

 

posted @   闯入码途的水产人  阅读(153)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示