Vue3 provide 和 inject的使用

在 Vue 中,provide 和 inject 是 Composition API 的一对功能,用于父子组件之间的依赖注入。它们的作用是让父组件可以向其所有子组件 提供数据或方法,而不需要通过逐层传递 props。

1. provide

provide 用于父组件中,提供数据或方法,供其子组件使用。

javascript 复制代码
<script setup>
import { provide } from 'vue';

const message = 'Hello from parent';
provide('message', message);
</script>

2. inject

inject 用于子组件中,接收父组件通过 provide 提供的值。

重新赋值后子组件会自动监听更新为新的值

javascript 复制代码
<script setup>
import { inject } from 'vue';

const message = inject('message');

# 要给子组件传值isLogin,ajax里会重新赋值isLogin,provide写在外层即可,ajax里重新赋值后子组件会自动监听更新为新的值
const isLogin = ref(!1);
provide('isLogin', isLogin);
const checkIsLogin = () => {
    (api as any).User.isLogin().then((res) => {
        isLogin.value = !0;
    });
}
checkIsLogin();
</script>

<template>
  <p>{{ message }}</p>
</template>

使用场景

  • 父子组件传值:适用于层级较深的组件传递数据,避免层层传递 props。
  • 跨组件共享数据:适用于在多个组件中共享相同的数据。

注意

  • provide 和 inject 主要用于组件之间的通信,特别是当组件的嵌套较深时,它们可以避免 prop drilling(逐层传递 props)。
  • 它们不具备响应式特性,除非提供的对象是响应式的。如果希望注入的数据是响应式的,可以通过 reactive 或 ref 包装。
相关推荐
honkun62 小时前
vue 下拉树组件 vxe-table-select 实现分页多选
前端·javascript·vue.js
溪语流沙4 小时前
【Web全栈进阶】监控与告警:线上系统的“体检报告”
前端·vue.js·python·fastapi
卤蛋fg65 小时前
vue 下拉树组件 vxe-table-select 实现分页多选
vue.js
u0111026758 小时前
Vue 页面离开后还在轮询?统一清理计时器、监听器与观察器
前端·javascript·vue.js
大猩猩X8 小时前
vue 表格组件 vxe-table 实现多行编辑,支持增删改查与校验
前端·javascript·vue.js·vxe-table
ss2738 小时前
基于springboot+vue+mysql「校园二手教材循环交易」小程序,三端全跑通
vue.js·spring boot·mysql
冒险的豆子10 小时前
Proxy & Vue 响应式(合并精简版,适合面试)
前端·javascript·vue.js
Java后端的Ai之路10 小时前
前端技术Vue-18-视图中的渲染
前端·javascript·vue.js
濮水大叔21 小时前
函数式与对象式:前端架构的两种成本曲线
vue.js·react.js·函数式编程
vx_Biye_Design1 天前
django房屋租赁推荐系统78455-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·课程设计·express