vue3 provide与inject的使用小技巧分享

下面就让我来详细讲解一下"vue3 provide与inject的使用小技巧分享",并提供两个示例。

1. 什么是 provide 与 inject

provide 和 inject 是两个 Vue3 中提供的 API,用于实现祖先组件向子孙组件传递数据或者向其它组件提供数据。由于它们是成对使用的,因此在使用时需要同时使用两个API。

具体而言,provide 是定义一个数据提供源,它可以被一个或多个子组件访问。而 inject 是注入数据,并可以在组件内使用 provide 提供的数据。

2. 为什么要使用 provide 与 inject

使用 vue3 provide 与 inject,有以下几个优点:

  • 无论嵌套多深,我们都可以轻松地将数据提供给任意组件,而不需要像 props 传递一样一级一级一层层地传递。
  • 对于 Vue 2.x 中的 provide 和 inject 而言,提供的数据在父组件中改变时,子组件中的数据不会受到影响,而在 Vue 3.x 中,当祖先组件的数据更新时,后代组件中的数据也会同步更新,这样可以在一定程度上减少模板模块的层次,可以在麻烦的工具代码中更好地维护数据。
  • 当需要跨级别进行组件交互时,采用 provide 和 inject 相对于 eventBus 更清晰、更高效些。

3. 使用示例

下面提供两个使用示例,来加深对 provide 与 inject 的理解。

示例一:祖先传递数据给后代

我们创建一个父组件,名为 Parent.vue,它提供了一个数值 data,子组件 Child.vue 可以直接访问。

<!-- Parent.vue -->
<template>
  <div>
    <h1>parent component</h1>
    <p>data: {{ data }}</p>
    <Child />
  </div>
</template>

<script>
import { provide } from 'vue';
import Child from './Child.vue';

export default {
  components: { Child },
  setup() {
    // 声明一个变量
    const data = 'Hello World';
    // 将 data 注入到祖先组件中
    provide('data', data);

    return {
      data,
    };
  },

};
</script>
<!-- Child.vue -->
<template>
  <div>
    <h2>child component</h2>
    <p>parent data: {{ parentData }}</p>
  </div>
</template>

<script>
import { inject } from 'vue';

export default {
  setup() {
    // 将祖先组件中名为 data 的数据注入到子组件中
    const parentData = inject('data');

    return {
      parentData,
    };
  },
};
</script>

在上述代码中,我们使用了 provide 将 data 在祖先组件中提供给了子孙组件,使用了 inject 在子孙组件中全局使用了该数据。

示例二:后代向祖先组件提交数据

我们创建一个子组件 Child.vue,我们需要将 input 中输入的数据,提交给祖先组件 Parent.vue 的 handleSubmit 方法中。

<!-- Parent.vue -->
<template>
  <div>
    <h1>parent component</h1>
    <Child />
  </div>
</template>

<script>
import { ref } from 'vue';
import Child from './Child.vue';

export default {
  components: { Child },
  setup() {
    const handleSubmit = (data) => {
      console.log(`submit data:`, data);
    };

    return {
      handleSubmit,
    };
  },
};
</script>
<!-- Child.vue -->
<template>
  <div>
    <h2>child component</h2>
    <input type="text" v-model="inputValue"/>
    <button @click="submitData">submit data to parent</button>
  </div>
</template>

<script>
import { inject } from 'vue';

export default {
  setup() {
    // 获取祖先组件的 handleSubmit 函数
    const handleSubmit = inject('handleSubmit');
    // 设置 input 双向绑定
    const inputValue = ref('');

    const submitData = () => {
      handleSubmit(inputValue.value);
      inputValue.value = ''; // 清空input数值
    };

    return {
      inputValue,
      submitData,
    };
  },
};
</script>

在上述代码中,我们使用了 inject 获取祖先组件的 handleSubmit 函数,将子组件中的数据通过 handleSubmit 方法提交给了祖先组件。

4. 结束语

使用 Vue3 中提供的 provide 和 inject,我们可以简单高效的在组件之间传递数据,也不需要考虑组件的内层结构,这使得我们可以更加轻松的重构代码且避免出现大量的 props 传递,在以后的 Vue3 开发中来避免冗余代码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue3 provide与inject的使用小技巧分享 - Python技术站

(0)
上一篇 2023年5月29日
下一篇 2023年5月29日

相关文章

  • Vue3 + TypeScript 开发总结

    下面我将分享一下“Vue3 + TypeScript 开发总结”的完整攻略,主要包括以下几个部分: 项目初始化与配置 TypeScript 基础知识回顾 Vue3 中 TypeScrip 的应用实践 示例说明 首先,我们需要进行项目初始化和配置。在初始化项目时,我们需要在命令行中输入以下代码: vue create my-project 随后,我们可以根据实…

    Vue 2023年5月28日
    00
  • Vue项目优化打包之前端必备加分项

    针对“Vue项目优化打包之前端必备加分项”的完整攻略,我分别从以下三个方面进行详细的讲解: 代码规范化和优化 webpack的性能调优 最佳实践 代码规范化和优化 代码规范:在Vue开发中,代码规范可以通过使用ESLint和Prettier等工具进行检查和格式化,以确保代码的可读性和可维护性。此外,可以使用Husky和Lint-staged等工具,将代码规范…

    Vue 2023年5月27日
    00
  • vue使用better-scroll实现横向滚动的方法实例

    下面我来详细讲解“vue使用better-scroll实现横向滚动的方法实例”的完整攻略。 1. 安装better-scroll 在使用better-scroll之前,我们需要先安装它。可以使用npm或者yarn进行安装,命令如下: npm install better-scroll –save 或者 yarn add better-scroll 2. 实…

    Vue 2023年5月28日
    00
  • Vue.js每天必学之计算属性computed与$watch

    下面是详细讲解 Vue.js 中计算属性 computed 与 $watch 的攻略。 计算属性 computed 概念 计算属性是一种带有缓存功能的属性,它依赖于其它属性值,并且其返回值会根据这些被依赖的值变化而改变。计算属性除了需要响应式依赖,还可以拥有自己的缓存,只要它所依赖的属于没有发生改变,那么多次读取该计算属性时,只会进行一次计算。 用法 我们可…

    Vue 2023年5月29日
    00
  • vue实现全选功能

    下面是详细讲解“Vue.js实现全选功能”的完整攻略,包含两条示例说明: 一、实现思路 要实现全选功能,需要以下几个步骤: 定义一个变量来存储当前是否为全选状态。 绑定checkbox的v-model,将每个checkbox的选中状态绑定到一个数组中。 使用计算属性,判断当前是否处于全选状态,然后绑定全选的checkbox的v-model,实现全选功能。 监…

    Vue 2023年5月29日
    00
  • vue实现换肤功能

    实现vue的换肤功能通常有两种方式,一种是使用CSS变量(CSS variables),另一种是使用动态加载CSS文件。以下将详细解释这两种实现方式。 使用CSS变量 CSS变量是CSS3新增的特性,定义在:root伪类下,可以通过var()函数在相关的CSS样式中使用。在切换主题时,只需将:root中CSS变量的属性值修改为新主题的对应颜色值即可。 下面是…

    Vue 2023年5月27日
    00
  • 基于Vue实现Excel解析与导出功能详解

    基于Vue实现Excel解析与导出功能详解 介绍 在前端应用程序中,Excel文件通常不是一个很方便的东西。 Vue.js 提供了一些工具来处理Excel文件,让使用Excel的经验更加愉快。本文将介绍如何使用Vue.js和一些插件来解析Excel文件并导出Excel文件。 主要步骤 步骤1:设置Vue.js应用 首先,让我们创建一个新的Vue.js应用程序…

    Vue 2023年5月27日
    00
  • Vue 按照创建时间和当前时间显示操作(刚刚,几小时前,几天前)

    实现Vue按照创建时间和当前时间显示操作的方法可以使用moment.js库。该库可以帮助格式化日期和时间,并提供许多快捷选项。 以下是实现这一功能的完整攻略: 步骤1: 安装moment.js npm install moment –save 步骤2: 在Vue组件中导入moment.js库 import moment from ‘moment’; 步骤3…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部