了解Vue 3的provide和inject用法

  • 前言
  • 在组合式API中的用法
    • 基本用法

前言

provide和inject在Vue 2中已经被广泛应用,不是新鲜API,3.0重新认识一下它们两个。

一句话介绍:provide可以向所有子孙组件提供数据以及提供修改数据的方法,子孙组件用inject使用数据。

在组合式API中的用法

基本用法

似乎,组合式API的provide没有提供批量方法, 只能每个变量写一句。

顶级组件:

<template><div><son /></div>
</template><script setup>
import son from "./son.vue";
import { provide } from "vue";
provide("abc", "123");
</script>

子组件:

<template><div><grandson /></div>
</template><script setup>
import grandson from "./grandson.vue";
</script>

孙组件:

<template><div>我是孙子</div>
</template><script setup>
import { inject } from "vue";
const abc = inject("abc");
console.log(abc);
</script>

官方说:

inject() can only be used inside setup() or functional components.

这个意思是说,inject()只能放在setup()生命周期里运行,不能放在别的周期里运行,也不能放在事件周期里运行。所以你可以先在setup()周期取值。

例一:这是允许的,因为console.log是setup()生命周期里的同步代码

function xx() {console.log(inject("abc"))
}
xx()

例二:这是禁止的,因为setTimeout是异步函数,执行console.log(inject(“abc”))的时候已经不在setup()生命周期里。

function xx() {setTimeout(() => {console.log(inject("abc"))})
}
xx()

例三:让例一的xx函数作为鼠标事件回调,也是禁止的,原因也一样。

例四:放在Promise.then()也是禁止的,比如

Promise.resolve().then(() => {console.log(inject("abc"))
})

Vue 3的provide和inject用法相关推荐

  1. vue中provide和inject 用法

    我们平时在开发的时候,最常用的父子组件通信方式就是父组件绑定要传递给子组件的数据,然后子组件通过props属性接收.但是一旦组件层级变多时,采用这种方式一级一级传递值非常麻烦,而且代码可读性不高,不便 ...

  2. vue 中provide的用法_[转]浅谈vue中provide和inject 用法

    provide:Object | () => Object inject:Array | { [key: string]: string | Symbol | Object } provide ...

  3. vue 中provide的用法_浅谈vue中provide和inject 用法

    一.概念解析 成对出现:provide和inject是成对出现的 作用:用于父组件向子孙组件传递数据 使用方法:provide在父组件中返回要传给下级的数据,inject在需要使用这个数据的子辈组件或 ...

  4. vue 3 学习笔记 (八)——provide 和 inject 用法及原理

    在父子组件传递数据时,通常使用的是 props 和 emit,父传子时,使用的是 props,如果是父组件传孙组件时,就需要先传给子组件,子组件再传给孙组件,如果多个子组件或多个孙组件使用时,就需要传 ...

  5. VUE2中provide 和 inject用法,以及怎么做响应式数据?

    1. provide/inject说明 provide 和 inject, 用来实现实现跨组件之间通信. 父子/孙子组件之间任意通信. 在祖先组件中通过provide注入一个依赖,不论组件层次有多深, ...

  6. vue3中 provide 和 inject 用法

    前言: 在父子组件传递数据时,通常使用的是 props 和 emit,父传子时,使用的是 props,如果是父组件传孙组件时,就需要先传给子组件,子组件再传给孙组件,如果多个子组件或多个孙组件使用时, ...

  7. provide和inject 用法

    这对选项需要一起使用,以允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在起上下游关系成立的斜体样式时间里始终生效. 使用场景:由于vue有$parent属性可以让子组件访问父组件 ...

  8. vue 中provide的用法_vue 中的 provide 和 inject 用法

    provider/inject:简单来说就是在父组件 provide 中提供变量,子组件 inject 中来注入,然后可以在子组件内部使用 provide 的变量 需要注意的是这里不论子组件有多深,只 ...

  9. vue3 provide 与 inject 用法

    1 说明: provide 可以在祖先组件中指定我们想要提供给后代组件的数据或方法,而在任何后代组件中,我们可以使用inject来接收provide提供的数据和方法. 2 用法:  父亲组件 < ...

最新文章

  1. python selenium - web自动化环境搭建
  2. 【系统平台】大四区部署
  3. oracle sysman 不存在_Oracle无法对所有 EM 相关帐户解锁
  4. 《MyBatis技术原理与实战》之动态SQL
  5. PHP调用wsdl文件类型的接口代码分享
  6. java中属于常量_java中的常量和属性
  7. JZOJ 5422. 【NOIP2017提高A组集训10.25】天才绅士少女助手克里斯蒂娜
  8. Hive体系结构(四)注意事项与扩展特性
  9. idea ssm打war包_IDEA下从零开始搭建SpringBoot工程
  10. k8s 组件介绍-API Server
  11. ERRORS:*: (auth.E003) ‘User.username‘ must be unique because it is named as the ‘USERNAME_FIELD
  12. 数组中其余的排除_6.8 C++字符数组 | 输出a、b、c
  13. java转盘抽奖代码_Java 实现大转盘抽奖
  14. 视觉里程计 特征点法
  15. matlab打反斜杠,[转载]转义字符 反斜杠
  16. Topcoder参赛入门
  17. 利用 Maxima 求解常微分方程
  18. 微信电脑端【多开问题】+附赠,解决桌面图标变小白块问题
  19. 电视剧《猎毒人》观后感
  20. 微信春节大数据出炉:《三体》阅读量第一 ;曝iOS 17应用商店将向第三方开放;斯坦福大学推出DetectGPT|极客头条

热门文章

  1. CSS语义-icont+text
  2. (教程)教你如何自己办理商标注册事宜
  3. 工具传送门(持续更新)
  4. 个人小程序笔记(辅助专用)
  5. python送程序员收入_程序员学Python后惊叹,这么丰厚的收入是Java给不了的!
  6. 小程序记账项目源码-采用云开发
  7. 前端table打印被截断,如何给每一页都增加表头
  8. 新手怎么开通抖音小店?详细操作步骤分享,建议收藏
  9. kafka分区数设置多少合适
  10. 沃尔玛账号被冻结后如何进行申诉?