Vue3 provide 和 inject的使用

在 Vue 中,provideinject 是 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。
  • 跨组件共享数据:适用于在多个组件中共享相同的数据。

注意

  • provideinject 主要用于组件之间的通信,特别是当组件的嵌套较深时,它们可以避免 prop drilling(逐层传递 props)。
  • 它们不具备响应式特性,除非提供的对象是响应式的。如果希望注入的数据是响应式的,可以通过 reactiveref 包装。
相关推荐
腻害兔16 分钟前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:IM 即时通讯模块,一个被低估的「全功能聊天系统」
java·前端·vue.js·产品经理·ai编程
妙码生花2 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(三十九):前端上传组件实现
javascript·vue.js·ai编程
JoyT5 小时前
Nuxt 3的核心设计与静态官网应用
前端·javascript·vue.js
无人生还8 小时前
从 Vue3 到 React · 快速上手系列第 5 篇:事件处理与表单(受控组件 vs v-model)
前端·vue.js·react.js
乌夷8 小时前
vue知识点
前端·javascript·vue.js
daols889 小时前
vue vxe-context-menu 通用右键菜单组件使用
前端·javascript·vue.js·vxeui
腻害兔10 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:MES 制造执行模块,一个被严重低估的「工业级 ERP 核心」
vue.js·产品经理·制造
勇往直前plus19 小时前
Vue3(篇一) 核心概念——响应式模板语法与组件基础
前端·javascript·vue.js
咩咩啃树皮19 小时前
第43篇:Vue3计算属性(computed)完全精讲——缓存机制、依赖计算、业务最优解
前端·vue.js·缓存
郝亚军1 天前
webstorm如何创建vue 3.js
javascript·vue.js·webstorm