前言

在 Vue3 中,父组件向子组件传参的方法。

与 Vue2 相比,还是有一些区别的。

基础示例

现在我们的需求是,要通过父组件,传递一个标题来让子组件显示。

子组件 Com.vue:

<template><div>{{ title }}</div>
</template>
import { ref } from 'vue'
export default {// 接收参数// 也可以这么写: props: ["msg1", "msg2"]props: {title: String,//父组件传过来的数据},// props: 组件参数(不可变)setup(props) {// 可直接 props.x 接收参数console.log('父组件传递的参数:', props)// 让其变为响应式变量const title = ref(props.title)// 暴露给模板用return { title }}
}

然后咱们打开父组件,传递 title 参数给子组件。

<template><Com title="我是标题(来自父组件)" />
</template>


看到没,这样就传递过去了。

依赖注入

依赖注入与 Vue2 概念相同,不赘述了。

想象一下如果有这样的结构:

有一些多层级嵌套的组件,形成了一颗巨大的组件树,而某个深层的子组件需要一个较远的祖先组件中的部分内容。在这种情况下,如果仅使用 props 则必须将其沿着组件链逐级传递下去,这会非常麻烦,咱们为了直观一些,来看一个图。

你看啊,我们的 root 你可以理解为父组件,我们要向 DeepChild 子组件进行传参,但是由于它是嵌套在 Footer 子组件内,所以需要借助 Footer 再传一层,所以说,你需要两层 Props 进行传递,怎么样,理解了没。

另外,这才仅仅一层,如果嵌套多层呢?别傻了,嵌套几层,你就需要几层 Props ,很烦的好不好。

为了解决这样一个问题,咱可以使用 provide 和 inject,也就是依赖和注入。

一个父组件相对于其所有的后代组件,会作为依赖提供者。任何后代的组件树,无论层级有多深,都可以注入由父组件提供给整条链路的依赖。

用大白话说,就是无论你子组件嵌套的再深,哪怕 100 层,我的参数也能直接给到目标子组件,不需要你一层层往下传递了。


使用了依赖注入后,父组件直接 “提供(Provide)” ,子组件直接 “注入(Inject)” 使用。


说了这么概念性的东西,我们来实际操作一把。

打开 com.vue 子组件,我们来改造一下前面通过 Props 传参方式的代码。

<template><div>{{ title }}</div>
</template>
import { inject } from 'vue'
export default {setup() {// 接收// 第一个参数(必填): 父组件提供的键名// 第二个参数(非必填): 当键值不存在时提供的默认值const title = inject('title', '无标题')// 暴露给模板用return { title }}
}

紧接着呢,打开父组件,咱们来提供这个参数。

<template><Com />
</template>
import Com from './components/com.vue'
import { provide } from 'vue'
export default {components: { Com },setup() {// 提供// 第一个参数(必填): 注入名// 第二个参数(必填): 供给的值(可以是响应式,如ref等)provide('title', '登dua郎')}
}

全局提供

这个 “提供(provide)” 也可以放在整个 “应用层面”。

啥意思呢,就是我们可以放在 main.js 入口文件,为所有组件提供数据。

import { createApp } from 'vue'
const app = createApp({})
app.provide(/* 注入名 */ 'message', /* 值 */ 'hello!')

这种做法通常在什么情况下用呢?

那就是当你在编写插件时会特别有用,因为插件一般都不会使用组件形式来供给值。

写在后面

总的来说呢,要分场景,如果不涉及到子组件的嵌套,安心用 Props 即可,反之依赖注入即可。

其实早在 Vue3 之前,Vue2 中已经提供了依赖注入这样一个功能。其实这种写法呢,有利也有弊,虽然不用层层传递 Props,但其组件复杂时,这将非常混乱且难以维护!

SEO

Vue3.js官方文档,vue3.js 组件通信,vue3.js组件通信 父传子 教程,vue3组件之间通信(一)——父传子属性和方法,vue3 父子组件通信详细教程,Vue3组件间通信——父子传值、方法调用,Vue3父子组件间传参通信,vue3.0之组件通信之父子通信,Vue 3 父子组件传递数据的几种通信方式,vue3 父子组件通信,vue3 父子组件间的传值通信,vue2.0组件之间通信(父子、子父、平级) ,vue3.0组件之父传子,Vue3 - 组件通信(父传子)。

Vue3 - 组件通信(父传子)相关推荐

  1. React组件通信(父传子,子传父) - 前端

    父组件向子组件传值(通过props传值) 子组件: class Children extends Component{constructor(props){super(props);}render() ...

  2. 父子组件通信——父传子props

      在父组件与子组件中,为了实现父子组件之间的通信,需要使用props,来实现父组件中的内容被子组件所使用.在子组件中使用props来进行与父组件之间的通信.   在使用组件时通过绑定props中定义 ...

  3. VUE组件通信——父传子、子传父

    一.父传子 父组件: <ModuleTree ref="moduleTreeRef" :showCheckBox="true" v-on:handleCh ...

  4. React中的组件通信——父传子、子传父、Context

    0.认识组件间的通信 在开发过程中,我们会经常遇到需要组件之间相互进行通信: 比如App可能使用了多个Header,每个地方的Header展示的内容不同,那么我们就需要使用者传递给Header一些数据 ...

  5. Vue组件通信(父传子、子传父、兄弟通信)

    一.父组件传到子组件 父组件是通过props属性给子组件通信的 数据是单向流动 父->子 (子组件中修改props数据,是无效的,会有一个红色警告) 1 . 父组件parent.vue代码如下: ...

  6. 父子组件通信-父传子

    在开发中,往往一些数据确实需要从上层传递到下层: 比如在一个页面中,我们从服务器请求到了很多的数据. 其中一部分数据,并非是我们整个页面的大组件来展示的,而是需要下面的子组件进行展示. 这个时候,并不 ...

  7. Vue组件化开发--组件通信方式-父传子、子传父、非父子组件传值

    一.概述 以脚手架搭建的Vue项目为笔记背景. 如果将所有的代码逻辑全部放到一个组件中,代码是非常的臃肿和难以维护的. 并且在真实开发中,可能会有更多的内容和代码逻辑,对于扩展性和可维护性来说都是非常 ...

  8. Vue2组件间通信——父传子值props

    Vue2组件间通信--父传子值props Vue2中组件间通信系列,本篇是关于父组件向子组件传值的介绍,这里我会用通俗的语言帮助大家理解props配置项 功能: 子组件可以接收到父组件传递的数据信息, ...

  9. Vue组件之间的通信-父传子-子传父

    文章目录 Vue的组件嵌套 Vue组件间通信 1.父组件传递给子组件 1.1数组的方式 1.2对象的方式 2.子组件传递给父组件 Vue的组件嵌套 前面我们是将所有的逻辑放到一个App.vue中: 在 ...

  10. vue3.0组件之父传子,子传父,父传孙

    父组件<template> <!-- <div>{{name}}</div> {{computedsx}} {{sum}}<button @click= ...

最新文章

  1. 如何利用SOM网络进行柴油机故障诊断
  2. 架设SharePoint工作组网站(上)
  3. C语言 关于指针的格式化
  4. 许可证( License LicenseLicenseLicenseLicenseLicense)服务器配置
  5. java 常量池溢出_Java方法区和运行时常量池溢出问题分析(转)
  6. 【论文阅读-Bidding】《Real-Time Bidding Algorithms for Performance-Based Display Ad Allocation,2011年,微软》...
  7. android 后退按钮,如何在android中处理Search View的后退按钮
  8. spring mvc 前台属性数据的传递和后台属性数据的接收
  9. 华为手机桌面计算机消失怎么办,华为手机桌面所以图标不见了怎么办
  10. 萤石云谷歌禁用flash_mac chrome屏蔽flash插件怎么办 mac chrome flash启用方法
  11. Windows 域之 LDAP与AD
  12. matlab 定义结构体数组,结构体数组及其定义和使用,C语言结构体数组详解
  13. CSU 2166: 卖萌表情(2018湖南省赛)
  14. Python监控服务器显卡使用情况程序
  15. uniapp 原生js实现公历转农历
  16. scp 自定义端口号
  17. android 2k 屏幕 字体模糊,2k显示器怎么会字体模糊
  18. 2022年总结关于网络安全工程师职业发展方向和职业前景
  19. 解决出行难题,共享巴士小程序开发
  20. 解决android代码编译时内存不足

热门文章

  1. java利用Scanner获取键盘输入
  2. VMware workstation安装虚拟机--Windows XP
  3. seqCNA笔记-处理来自肿瘤样本的高通量测序拷贝数数据
  4. Java清空文件内容
  5. sslcontext java_java – SSLContext初始化
  6. 注册表 关闭打印机服务器,Windows 2016 server部署打印机服务器后 重启服务器,出现“重定向的打印机”,如何来删除?...
  7. calander时间相关整合
  8. Java自动化测试系列[v1.0.0][TestNG测试开发环境配置]
  9. 2017免费发布信息平台排行大全!
  10. 联想拯救者R720在重装Win10系统时无法识别固态硬盘的解决方法