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使用较多的场景在高阶组件或者插件上面。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!