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

yizhihongxing

下面就让我来详细讲解一下"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日

相关文章

  • vue项目如何实现前端预览word与pdf格式文件

    要实现前端预览word与pdf格式文件,我们需要借助一些第三方库或工具。以下是一些实现前端预览word与pdf格式文件的常见方法: 1. 使用第三方库进行预览 我们可以使用一些第三方库来实现前端预览word与pdf格式文件,例如viewerjs和pdf.js。 使用viewerjs Viewerjs是一个用于在网页上预览office文档和pdf文件的开源库。…

    Vue 2023年5月28日
    00
  • Vue编译器实现代码生成方法介绍

    Vue编译器实现代码生成方法介绍 概述 Vue编译器将Vue模板编译成渲染函数,从而在浏览器上渲染出真正的页面。代码生成是Vue编译器实现的关键部分之一。它将预处理过的模板转化为可以直接执行的渲染函数。 在进行代码生成时,Vue编译器会通过模板语法分析器将模板转化为抽象语法树(AST),接着对AST进行优化处理,最后再将AST转换为渲染函数的JavaScri…

    Vue 2023年5月27日
    00
  • 基于vue实现多引擎搜索及关键字提示

    实现基于Vue的多引擎搜索及关键字提示主要包括以下步骤: 构建基础页面结构 在HTML文件中,构造基础的页面结构,包括搜索框和搜索按钮等必要的组件。同时,引入Vue.js库和相关依赖。 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> …

    Vue 2023年5月27日
    00
  • 一份超级详细的Vue-cli3.0使用教程【推荐】

    一份超级详细的Vue-cli3.0使用教程 简介 Vue-cli3.0是Vue.js 官方提供的一个基于 webpack4 和 Webpack-dev-server 的脚手架工具,用于快速构建vue项目开发环境。本教程将为您带来Vue-cli3.0的完整使用攻略,从安装到构建一个简单的Vue项目,让你轻松掌握Vue-cli3.0的使用方法。 安装Vue-cl…

    Vue 2023年5月28日
    00
  • Project Reactor 响应式范式编程

    Project Reactor 响应式范式编程 简介 Project Reactor是一款响应式范式编程框架,用于构建基于流(stream)概念的异步、非阻塞、事件驱动的应用程序。它基于Reactive Streams标准,并提供了一系列工具类和API,能够轻松地创建、组合和执行异步流处理操作。在使用Project Reactor编程时,开发人员通过声明式方…

    Vue 2023年5月28日
    00
  • 详解Vue组件插槽的使用以及调用组件内的方法

    关于Vue组件插槽的使用以及调用组件内的方法,可以分为以下几个方面进行讲解: 插槽的基本使用 具名插槽 作用域插槽 调用组件内部方法 1. 插槽的基本使用 插槽(slot)是用来在父组件中传递HTML标记到子组件中的一种机制。使用<slot></slot>标记在子组件中定义一个插槽,父组件在传递HTML标记到子组件时,可以使用<…

    Vue 2023年5月28日
    00
  • vue如何将html内容转为图片并下载到本地

    要将HTML内容转换为图片并下载到本地,我们可以使用Vue的第三方库html2canvas。下面是这个完整攻略的具体步骤。 步骤一:安装依赖 首先,我们需要安装html2canvas库,可以通过npm安装或者使用CDN。这里我们以npm安装为例。 npm install html2canvas 步骤二:在Vue中使用 在Vue组件中,我们需要导入html2c…

    Vue 2023年5月28日
    00
  • 详解将数据从Laravel传送到vue的四种方式

    接下来我会详细讲解“详解将数据从Laravel传送到vue的四种方式”。对于这个话题,我们可以采用以下四种不同的方式: 使用Laravel的控制器将数据传递到Vue组件。 将数据放在JavaScript中,然后将其传递给Vue组件。 直接在Vue组件中使用ajax获取数据。 在vue组件中使用axios向API端点请求数据。 下面我会分别对这四种方式进行详细…

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