游戏攻略

深入理解Vue中的provide和inject函数

栏目:游戏攻略 日期: 作者:游戏资讯

在Vue中,provide和inject函数是用来实现数据多级传递的。如果你没有看过这两个函数的源码,可能会觉得它们的实现非常神秘。但实际上,它们的源码非常简单。本文将深入讲解provide和inject函数是如何实现数据多级传递的。值得一提的是,本文中使用的Vue版本为3.5.13。

如果你想深入学习Vue,欢迎关注公众号:【前端欧阳】,给自己一个进阶Vue的机会。

接下来,我们先来看一个demo。以下是一个父组件的代码:

在父组件中使用provide函数为后代组件注入一个名为count的响应式变量。

接下来,让我们来看子组件child.vue的代码:

从上面的代码可以看到,子组件中并没有做任何事情,只是渲染了孙子组件。

接下来,让我们来看孙子组件grand-child.vue的代码:

从上面的代码可以看到,在孙子组件中使用inject函数成功获取了父组件中注入的count响应式变量。

接下来,让我们来深入了解provide函数。

首先,我们来debug provide函数的代码。给父组件中的provide函数打个断点,如下图:

刷新页面,代码将会停留在断点处。让断点走进provide函数,代码如下:

...

接下来,让我们来看inject函数。

同样地,给孙子组件中的inject函数打个断点。如下图:

将断点走进inject函数,代码如下:

...

最后,让我们对本文进行总结。

本文深入讲解了使用provide和inject函数是如何实现数据多级传递的。

在创建Vue组件实例时,子组件的provides属性对象会直接使用父组件的provides属性对象。如果在子组件中使用了provide函数,那么会以父组件的provides属性对象为原型创建一个新的provides属性对象,并且将provide函数中注入的内容塞到新的provides属性对象中,从而形成了原型链。

在孙子组件中,他的parent就是子组件。如果没有在组件内使用provide注入东西,那么就会直接使用他的父组件的provides属性对象,所以这里的子组件是直接使用的是父组件中的provides属性对象。因此,在孙子组件中可以直接使用inject函数拿到父组件中注入的内容。

欢迎关注公众号:【前端欧阳】,给自己一个进阶Vue的机会。

另外,欧阳写了一本开源电子书《vue3编译原理揭秘》,看完这本书可以让你对Vue编译的认知有质的提升。这本书初、中级前端都能看懂,完全免费,只求一个star。

关键词:

相关资讯