Vue.js组件开发-在setup函数中使用provide

在Vue.js 3的组合式API中,setup函数是组件的初始化逻辑所在地,可以在这里使用provide函数来向组件的后代提供数据或方法。这些数据或方法随后可以在任何后代组件(子组件、孙组件等)中通过inject函数被注入和使用。

步骤:

1‌.导入必要的API‌:

首先,需要从vue包中导入provide函数。

‌2.在setup函数中调用provide‌:

在setup函数内部,调用provide来提供数据或方法。provide函数接受两个参数:一个键(通常是字符串)和你要提供的值。

‌3.在后代组件中使用inject‌:

在后代组件的setup函数中,可以使用inject函数来接收由祖先组件提供的值。inject函数的参数是想要注入的键,它会返回对应的值。

示例:

展示如何在父组件的setup函数中使用provide,并在子组件中使用inject:

‌父组件(ProviderComponent.vue)‌:

html 复制代码
<template>
  <div>
    <h1>Provider Component</h1>
    <ChildComponent />
  </div>
</template>

<script>
import { provide, reactive } from 'vue';
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent
  },
  setup() {
    const state = reactive({
      message: 'Hello from Provider!'
    });

    provide('sharedState', state);

    // setup函数通常不返回任何内容,除非需要暴露响应式数据给模板
    // 在这个例子中,我们不需要返回任何内容
  }
};
</script>

子组件(ChildComponent.vue)‌:

html 复制代码
<template>
  <div>
    <h2>Child Component</h2>
    <p>{{ sharedState.message }}</p>
  </div>
</template>

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

export default {
  setup() {
    const sharedState = inject('sharedState');

    // 返回需要暴露给模板的数据
    return {
      sharedState
    };
  }
};
</script>

说明:

这个例子中,ProviderComponent是父组件,它通过provide函数提供了一个名为sharedState的响应式对象。ChildComponent是子组件,它通过inject函数注入了sharedState,并在模板中使用了它。

**注意:**provide和inject的键(在这个例子中是'sharedState')在父组件和子组件之间必须匹配。此外,由于sharedState是一个响应式对象,所以当它的内容发生变化时,子组件的视图也会自动更新。

相关推荐
FRing034 小时前
vue2干货总结2(v-bind、v-for、v-model、指令修饰符、v-bind操作class和style)
开发语言·前端·vue.js·vue2
徐小夕7 小时前
深度剖析 30k star 的编码 Agent DeepSeek-Reasonix:长会话 Token 成本直降 80%
前端·vue.js·github
ruanno_top10 小时前
1 万行表格只渲染 18 行:虚拟滚动让我放弃了三个功能
vue.js
仨孩子的爹10 小时前
套打总偏两毫米:预印刷单据的校准方法和三个误区
vue.js
徐小夕10 小时前
JitKnow知识库4.8发布:本体+知识图谱检索引擎,让AI回答不再“一本正经地胡说八道”
前端·vue.js·github
tryCbest11 小时前
Vue3——第 11 篇:组合式 API(上)——setup 与响应式 API 深度解析
前端·javascript·vue.js
tryCbest11 小时前
Vue3——第 13 篇:计算属性与侦听器——computed 与 watch 的进化
前端·javascript·vue.js
闲来没事抠鼻屎12 小时前
标签打印 8 个尺寸公式:小票、价签、吊牌、面单通用
vue.js
时间的情敌13 小时前
Vue3 + Cesium 实战:本地上传 GLB 模型、模型上叠加 GLB、点击控制透明度
前端·vue.js·cesium
小蒜学长15 小时前
基于SpringBoot+Vue的云南地区扶贫助农系统的设计与实现(代码+数据库+LW)
java·vue.js·spring boot·后端·乡村振兴