vue3通过provide与inject我们可以把父组件数据传递N个层级的子组件

vue3 provide 与 inject

我们通过props属性可以把数据传给组件,而通过provide与inject我们可以把数据传递给N个层级的子组件,比如A组件用了B组件,B组件用了C组件,它可以把组件直接从A传给C组件,vue2使用computed来实现响应式,而vue3中 provide 使用ref或reactive定义的变量即可实现响应式。

A组件传入值,传入了userInfo对象,不用管传给谁了谁,谁都可以去接收key为provideCount的数据

A组件名称 app.vue
<!-- A组件名称 app.vue -->
<template>
  <div class="itxst">
    <label>A组件显示:{
  {state.userInfo.count}}</label>
    <!-- 我是A组件调用了B组件,我可以把值传给B或C组件 -->
    <bcomp />
  </div>
</template>
 <script setup>
//导入 provide
import { reactive,provide } from "vue";
import bcomp from "./provideB.vue";
//定义需要传递的对象
const state=reactive({userInfo:{count:1}})
//定了 provide 的 key 和 要传递的值
provide("provideCount",state.userInfo);
</script>

B组件调用C组件,但是我啥也没干

B组件名称 provideB.vue
<!-- B组件名称 provideB.vue -->
<template>
  <div class="b">
     <!-- 我是B组件调用了C组件 -->
    <ccomp/>
  </div>
</template>

<script setup>
import { reactive } from "vue";
import ccomp from "./provideCSetup.vue";
</script>

C组件获取A组件传入的值,我修改了userInfo的值,A组件也会跟着变哦。

C组件名称 provideCSetup.vue

<!-- C组件名称 provideCSetup.vue -->
<template>
  <div class="c">
     <!-- 我是C组件获取了A组件的值 -->
    <div >
      C组件显示:  {
  { userInfo.count }}
    </div> 
  </div>
</template>

<script setup>
import { inject, reactive } from "vue";
//获取 provide 传入的值
const userInfo = inject('provideCount');

//测试响应式
setInterval(function(){userInfo.count=userInfo.count+1},1000)
</script>

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2023-12-17 16:50:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-17 16:50:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-17 16:50:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-17 16:50:01       20 阅读

热门阅读

  1. 数据库处理与分组存储

    2023-12-17 16:50:01       30 阅读
  2. MySQL数据库的特点、语法、指令...

    2023-12-17 16:50:01       35 阅读
  3. AIGC stable diffusion学习笔记

    2023-12-17 16:50:01       39 阅读
  4. Golang 二分查找 LEETCODE704 小记

    2023-12-17 16:50:01       48 阅读
  5. css前端主题切换方案(三种)

    2023-12-17 16:50:01       30 阅读
  6. C语言经典错误总结(三)

    2023-12-17 16:50:01       39 阅读
  7. 在Flutter中使用PhotoViewGallery指南

    2023-12-17 16:50:01       40 阅读
  8. 【Qt5】QMouseEvent的globalPos

    2023-12-17 16:50:01       38 阅读
  9. Harmonyos系统web组件使用

    2023-12-17 16:50:01       35 阅读
  10. css中定位方式

    2023-12-17 16:50:01       40 阅读