vue祖孙组件通信传值 provide 与 inject 以及 数据的响应式

这篇具有很好参考价值的文章主要介绍了vue祖孙组件通信传值 provide 与 inject 以及 数据的响应式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

vue祖孙组件通信传值 provide 与 inject 以及 数据的响应式

通常,当我们需要从父组件向子组件传递数据时,我们使用 props。但是对于一些深度嵌套的组件,深层的子组件只需要父组件的部分内容。在这种情况下,如果仍然将 prop 沿着组件链逐级传递下去,可能会很麻烦。

provide 和 inject无论组件层次结构有多深,父组件都可以作为其所有子组件的依赖提供者。解决了跨层级传递属性的不方便。

一、概念解析

  • 成对出现:provide和inject是成对出现的
  • 作用:用于父组件向子孙组件传递数据
  • 使用方法:
    • provide在父组件中返回要传给下级的数据;
    • inject在需要使用这个数据的子辈组件或者孙辈等下级组件中注入数据。
  • 使用场景:由于vue有$parent属性可以让子组件访问父组件。但孙组件想要访问祖先组件就比较困难。通过provide/inject可以轻松实现跨级访问父组件的数据

二、用法解析

1 provide

在 祖辈组件的provide 中指定要传递给子孙组件的数据。

data() {
    return {     
        data:"给子孙的数据"   
    } 
},
provide() {   
    return {    
        data: this.data   
    } 
},

2 inject

子孙组件通过inject注入祖父组件传递过来的数据。

// inject用来指定一个数组或者一个对象,数组的话就放provide里字段的名称,而对象的话可以指定
data() {
  return {}
},
inject: ['data'],


inject: {
    data: {
      from: 'data',
      default: ""
    }
  }

但是此时data并不是响应式的数据.....

provide和inject绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的 property 还是可响应的。

provide和inject数据响应式的解决方案

一、把值转为函数,记得要用箭头函数,不然不能正确获取this

data () {
    return {
        data: ""
    }
}
provide() {
  return {
    data: () => {
      return this.data;
    },
  };}

然后使用时就要变成了函数的调用

inject: ['data'],
computed: {
    data1() {
        return this.data()
    }
}

此时当祖辈组件的data改变时, 子组件中data1的值也会改变

二、把provide所在的Vue实例给传递下去

data () {
    return {
        data: ""
    }
}
provide() {
  return {
    ParentCom: this,
  };
  }

在子组件使用时:

inject: ['ParentCom'],
methods:{
    data_func () {
      console.log(ParentCom.data)
    }
}

之所以官方文档对此特性语焉不详,就是因为从他们的出发角度看不是特别推荐使用它,同时也怕开发者滥用。而从业务开发的角度来讲,绝大部分场景应该选用Vuex而不是provide/inject。 Vuex背后是原型链和响应式,并没有用到provide/inject。

小心内存泄漏!

这个问题是最近在实际开发中发现的,其实正中了官方所担心的使用不恰当的问题。
起因是provide里提供了一个方法,在子组件里调用这个方法,把子组件里的图表实例传递进去Hold住,以便将来调用。这样一来,图表的实例相当于一直存在于内存里而无法被回收掉,没过多久页面就卡顿的不行了。文章来源地址https://www.toymoban.com/news/detail-631882.html

到了这里,关于vue祖孙组件通信传值 provide 与 inject 以及 数据的响应式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue组件间通信方式超详细(父传子、父传后代、子传父、后代传父、兄弟组件传值)

    父组件:父组件引入子组件时,通过 child :parentValue = \\\"parentValue\\\"/child 子组件传值。 备注:这种方式父传值很方便,但是传递给后代组件不推荐(父-子-孙),且这种方式父组件不能直接修改父组件传过来的数据。 子组件:子组件通过props即 props:{ parentValue:{ type:String, default:\\\"\\\" } } 来

    2024年02月05日
    浏览(40)
  • vue3中的provide/inject(提供/注入)

    在说 provide/inject 先说一下 prop逐级穿透问题 。 通常我们从父组件向子组件传递数据时,会用到 props 。对于只需要传递一层或二层时还行,假如需要传递多层嵌套的组件,此时一级一级传递数据就会很繁琐,不利于编码,因此产生了 provide/inject ,从而解决此类问题。 有了

    2024年02月11日
    浏览(45)
  • Vue3 关于 provide、inject 的用法

    前言: 在前端项目中牵扯的最多的莫过于组件之间的传值了,除了最最常用的 props 和 emit ,其实在 Vue 中还额外提供了另外几种方法。今天分享一种组件之间通信的方法。 先别着急考虑标题这个 api 的含义。在这里我先动手写一个比较常见的场景。 所对应的组件内部代码比

    2024年02月06日
    浏览(40)
  • vue3中监听,组件通信如父子传值、Vuex、Event Bus的使用

    目录 一、监听 二、父子传值: 1、父传子: 2、子传父 三、全局状态管理(Vuex): 四、事件总线(Event Bus): 我们有一个父组件ParentComponent和一个子组件ChildComponent。在父组件中,我们使用:childProp=\\\"parentData\\\"将数据传递给子组件。在子组件中,我们使用defineProps来接收父组件

    2024年02月13日
    浏览(40)
  • vue3-provide和inject

    1.作用场景: 顶层组件向任意的底层组件传递数据和方法,实现跨层组件通信 2.跨层传递普通数据 1.顶层组件通过provide函数提供数据 2.底层组件通过inject函数获取数据 顶层组件 底层组件 3.跨层传递响应数据 顶层组件 底层组件 4.跨层传递方法 顶层组件可以向底层组件传递方

    2024年01月19日
    浏览(46)
  • vue2.x中的provide和inject用法

    父子通信 兄弟通信 跨级通信 1、类型 2、详细 3、示例 爷组件 父组件 孙组件 对比一下前后差异:无论点击多少次,孙组件中的诞生于 year 字段永远都是1995 并不会发生变化,通过 方式1、方式2、方式4传值是可以响应的。 正是官网所提到的: provide 和 inject 绑定并不是可响应

    2024年02月05日
    浏览(48)
  • vue中的provide/inject你知道吗(vue2、vue3)?

    昨天看一个项目代码看到了provide,但是学习的时候也没看到,看了官网才知道vue还有这个API。多数情况下,provide会和inject一起使用,又叫“依赖注入”。 “依赖注入”主要是解决父子组件传值“props逐级传递”问题。 所以,provide/inject的作用就是组件间的传值。 1.provide pr

    2024年02月08日
    浏览(51)
  • VueUse 是怎么封装Vue3 Provide/Inject 的?

    Provide 和 Inject 可以解决 Prop 逐级透传问题。注入值类型不会使注入保持响应性,但注入一个响应式对象,仍然有响应式的效果。 Provide 的问题是无法追踪数据的来源,在任意层级都能访问导致数据追踪比较困难,不知道是哪一个层级声明了这个或者不知道哪一层级或若干个层

    2024年02月03日
    浏览(45)
  • Vue3的组合式API中如何使用provide/inject?

    听说 Vue 3 加入了超多酷炫的新功能,比如组合式 API 等等。今天我们就来聊聊 Vue 3 中的组合式 API,并且如何使用 provide/inject 来搞定它! 首先,我们来了解一下组合式 API 是什么。其实,组合式 API 就是一个用来构建和组合函数的工具,它能让我们的代码更加简洁、可读性更

    2024年02月11日
    浏览(44)
  • Vue 中的依赖注入,特别是 Provide 和 Inject,它们的原理、用法和示例

    Vue.js 作为一款现代的前端 JavaScript 框架,提供了诸多方便开发的特性。其中依赖注入是一个非常有用的功能,可以在组件树中传递数据和方法,并使得组件之间的耦合度更低。本文将介绍 Vue 中的依赖注入,特别是 Provide 和 Inject,它们的原理、用法和示例。 在软件开发中,

    2024年02月06日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包