首页 > 其他分享 >provide / inject替代 Vuex

provide / inject替代 Vuex

时间:2023-06-07 16:25:04浏览次数:45  
标签:vue provide app inject 组件 Vuex

provide / inject可以解决上述弊端

A.vue–>B.vue,用法:

// A.vue
export default {
provide: {
name: 'Aresn'
}
}

// B.vue
export default {
inject: ['name'],
mounted () {
console.log(this.name); // Aresn
}
}

provide / inject替代 Vuex
Vuex 做状态管理,它是一个专为 Vue.js 开发的状态管理模式,用于集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

使用 Vuex,最主要的目的是跨组件通信、全局数据维护、多人协同开发。需求比如有:用户的登录信息维护、通知信息维护等全局的状态和数据。

一般在 webpack 中使用 Vue.js,都会有一个入口文件 main.js,里面通常导入了 Vue、VueRouter、iView 等库,通常也会导入一个入口组件 app.vue 作为根组件。一个简单的 app.vue 可能只有以下代码:

使用 provide / inject 替代 Vuex,就是在这个 app.vue 文件上做文章。把app.vue 理解为一个最外层的根组件,用来存储所有需要的全局数据和状态,甚至是计算属性(computed)、方法(methods)等。因为你的项目中所有的组件(包含路由),它的父组件(或根组件)都是 app.vue,所以我们把整个 app.vue 实例通过 provide 对外提供。

把整个 app.vue 的实例 this 对外提供,命名为 app(这个名字可以自定义,推荐使用 app,使用这个名字后,子组件不能再使用它作为局部属性)。接下来,任何组件(或路由)只要通过 inject 注入 app.vue 的 app 的话,都可以直接通过 this.app.xxx 来访问 app.vue 的 data、computed、methods 等内容。

app.vue 是整个项目第一个被渲染的组件,而且只会渲染一次(即使切换路由,app.vue 也不会被再次渲染),利用这个特性,很适合做一次性全局的状态数据管理。

//app.vue

其它任何界面或组件通过inject注入app 后就可以访问 userInfo 的数据了:

在其他页面导致userInfo更新,需要重新获取时:

参考这里 https://blog.csdn.net/isxixi/article/details/126544516

标签:vue,provide,app,inject,组件,Vuex
From: https://www.cnblogs.com/xiaohuizhang/p/17463674.html

相关文章

  • uniapp主题切换功能的第一种实现方式(scss变量+vuex)
    随着用户端体验的不断提升,很多应用在上线的时候都要求做不同的主题,最基本的就是白天与夜间主题。就像b站app主题切换,像这样的uniapp因为能轻松实现多端发布而得到很多开发者的青睐,但每个端的实现也有可能不同,现我把已实现的功能一点点的大家分享给大家,须要的可以参考一下,可......
  • Vuex的五个属性及使用方法示例
    一、Vuex简介Vuex是Vue.js的状态管理库,它通过中心化的状态管理使得组件间的数据共享更加容易。Vuex包含五个核心属性:state、getters、mutations、actions和modules。Vuex是Vue.js的状态管理库,它提供了一种集中式存储管理应用程序中所有组件的状态,并将其分离到一个可预测的状态容器......
  • vue3+vant4+vuex4入门案例
    案例用的是vant-ui库,你可换成你自己用的ui库即可。安装vuex依赖包npminstallvuex--savemain.js引用vuex,并挂载到vue中importstorefrom'./store';app.use(router).use(store); add.vue页面:1<template>2<h2>加法{{$store.getters.showNum}}</h2......
  • vue3+vant4+vuex4实现todolist备忘录案例
    案例图片如下:  1<van-cell-group>2<van-cell>3<van-row>4<van-colspan="20">5<van-field6:value="content"7@change="handl......
  • 【Azure K8S】演示修复因AKS密钥过期而导致创建服务不成功的问题(The provided client
    问题描述在AzureKubernetes服务中,创建一个InternalLoadBalancer服务,使用以下yaml内容:internallb.yamlapiVersion:v1kind:Servicemetadata:name:ilb-myappannotations:service.beta.kubernetes.io/azure-load-balancer-internal:"true"spec:type:LoadBala......
  • 注册表WinTrust\Trust Providers\Software Publishing作用是是否要做“检查证书是否
    http://support.obtain.com/knowledgebase/codesign/CRLDisable.html禁用证书吊销列表默认情况下,OBTAIN服务器服务在本地系统帐户下作为Windows服务运行。要禁用本地系统的CRL检查,我们必须使用注册表进行更改。1)在服务器机器上,单击“开始->运行”(可能因您的操作系统而异),在“......
  • [ASP.NET MVC 小牛之路]04 - 依赖注入(DI)和Ninject
    本文引用:https://www.cnblogs.com/willick/p/3223042.html为什么需要依赖注入在[ASP.NETMVC小牛之路]系列的理解MVC模式文章中,我们提到MVC的一个重要特征是关注点分离(separationofconcerns)。我们希望应用程序的各部分组件尽可能多的相互独立、尽可能少的相互依赖。我们的......
  • Go 开源库运行时依赖注入框架 Dependency injection
    Dependencyinjection一个Go编程语言的运行依赖注入库。依赖注入是更广泛的控制反转技术的一种形式。它用于增加程序的模块化并使其具有可扩展性。实例展示(HighAPI):typeAstruct{ Namestring}funcNewA()*A{ r:=rand.New(rand.NewSource(time.Now().UnixNano())......
  • Provider parse errors: Cannot instantiate cyclic dependency! ApplicationRef ("[E
    异常: 异常的原因:自定义的一个全局异常类,在它的构造器中注入Router路由就抛出这个循环依赖的异常 解决方式:使用injector ......
  • vuex加入后启动项目出现WARNING
    出现问题:importVuexfrom‘vuex’;Vue.use(Vuex);安装导入vuex后,在终端执行npmrunserve后出现WARNING,网页中vue无法启动WARNINGCompiledwith3warnings10:33:05warningin../node_module......