Vue3 实现共享数据三种方式

1. Vuex

1.1 安装vuex

npm install vuex@latest

1.2 创建store文件夹,创建index.js文件

在vuex@4.x中 创建vuex实例需要使用createStore方法

// store/index.js
import { createStore } from 'vuex'
import useLoginStore from './modules/login'

export default createStore({
    modules: {
        useLoginStore
    }
})
1.3 创建store/modules文件夹,创建login.js文件

在这里遇到了一个问题,就是需要使用createStore方法创建store实例,这样在应用模块的情况下是不生效的。如果在应用模块的情况下需要导出一个普通对象。如下:
问题解决参考:

// 问题解决参考:https://github.com/vuejs/vuex/blob/main/examples/composition/shopping-cart/store/modules/products.js
export default {
    namespaced: true,
    state:{
        ....
    },
    mutations:{
        ...
    },
    actions:{
        ....
    },
    getters:{
        ....
    }
}
1.5 挂载到vue应用上
createApp().use(store).mount('#app')
1.6 开始应用

注意:在vue3中,由于没有了this,所以需要使用引入useStore方法,来获取store实例。

import { useStore } from 'vuex'
setup(){
	const store = useStore();
	// 获取state
	store.state.useLoginStore.xxx
	// 异步请求
	store.dispatch('useLoginStore/xxx')
	// 同步状态
	store.commit('useLoginStore/xxx')
	// 获取getters OR 也可以通过:computed(()=> store.state.useLoginStore.xxx)
	store.getters['useLoginStore/xxx']
}

2. Global State

在vue3中,组件和响应式功能被隔离开了,也就是说在任意一个JavaScript文件中都可以使用响应式功能。不同vue2组件与响应式耦合在一起。那么可以借助这个特性创建全局状态
在这里插入图片描述

2.1 创建store文件夹,创建useLoginStore.js文件
// useLoginStore.js
const state = reactive({
    ....
})

const store = readonly(state);// 只读

function Login(){
    ...
}
function logout(){
    ...
}

export {
    store,
    Login,
    logout,
    ...
}

3. Provide / Inject

vue2中,提供了provideinject配置,可以让开发者在高层组件中注入数据,然后在后代组件中使用

在这里插入图片描述

除了兼容vue2的配置式注入,vue3composition api中添加了provideinject方法,可以在setup函数中注入和使用数据

在这里插入图片描述

考虑到有些数据需要在整个vue应用中使用,vue3还在应用实例中加入了provide方法,用于提供整个应用的共享数据

3.1 提供整个应用响应式对象,可以被后代组件使用
// useLoginStore.js
function provideLoginStore(app){
    const state = reactive({})
    function Login(){

    }
    function logout(){

    }
    app.use(key,{
        state,
        Login,
        logout,
    })
}

function useLoginStore(defalutValue = null){
    return inject(key, defalsutValue)
}

export {
    provideLoginStore,
    useLoginStore
}

3.2 进一步封装

未来可能会有很多个store,将useLoginStore抽离出去,直接维护这个index.js文件,然后main.js也只调用这个

// index.js
import { provideLoginStore } from './useLoginStore'
// 继续导入其他共享数据模块...
// import { provideStore as provideNewsStore } from "./useNews"s

// 提供统一的数据注入接口
function installStores(app){
    app.use(provideLoginStore);
    // 继续注入其他共享数据
    // provideNewsStore(app);
}

3.3 注册到全局
const app = createApp(App);
installStores(app);// 这样就把所有的store都注册到全局了
3.4 使用
// 子组件
import { injectStore } from './store/useLoginUser'

const store = injectStore();

对比

vuexglobal stateProvide&Inject
组件数据共享
可否脱离组件
调试工具
状态树自行决定自行决定
量级

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/633361.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySql--SQL语言

目录 SQl---DDL 结构定义 创建、删除 数据库 代码 运行 设计表 数据类型 整数 浮点数 主键 约束 主键自增长 默认值 字段注释 创建、删除 表 代码 运行 代码 代码 运行 SQL---DML 数据操纵 插入数据 代码 运行 代码 运行 代码 运行 代码 …

轻量音乐网站程序源码,在线音乐免费听歌

这是一个高品质的音乐共享和流媒体平台,用户可以在这个网站上免费在线听歌。这个轻量级的音乐网站程序源码,是您创建自己的音乐流媒体网站的最佳选择!它还支持制作插件,并且在更新后,您可以保留您的自定义设置。 下 载…

LeetCode刷题之HOT100之比特位计数

今天把仙剑三看完了,茂茂割肉让人无法释怀,眼泪止不住的流。长卿和紫萱的分离似乎也意味着重逢,这就是他们的宿命吧。怅然若失的感觉席卷全身,哎,做题吧。 1、题目描述 2、逻辑分析 题目要求将整数从0到此元素&#…

番外篇 | YOLOv5更换主干网络之Conformer:首个CNN + Transformer的backbone模型

前言:Hello大家好,我是小哥谈。Transformer和CNN在处理视觉表征方面都有着各自的优势以及一些不可避免的问题。因此,国科大、鹏城实验室和华为研究人员首次将二者进行了融合并提出全新的Conformer模型,其可以在不显著增加计算量的前提下显著提升了基网表征能力。论文已被IC…

“壕无人性”的沙特也要买量子计算机!巨头沙特阿美的合作方竟是它?

内容来源:量子前哨(ID:Qforepost) 文丨浪味仙 排版丨沛贤 深度好文:1200字丨5分钟阅读 摘要:石油巨头沙特阿美与 Pasqal 开启合作,计划于 2025 年部署一台 200 量子比特的量子计算机&#xff…

ubuntu设置root开机登录,允许root用户ssh远程登录

ubuntu与centos系统不同,默认root开机不能登录。 1、输入一下命令创建root密码,根据提示输入新密码 sudo passwd root 2、打开gdm-autologin文件,将auth required pam_succeed_if.so user ! root quiet_success这行注释掉,这行就…

Wpf 使用 Prism 实战开发Day22

客户端添加IDialogService 弹窗服务 在首页点击添加备忘录或待办事项按钮的时候,希望有一个弹窗,进行相对应的内容添加操作。 一.在Views文件夹中,再创建一个Dialog 文件夹,用于放置备忘录和待办事项的弹窗界面。 1.1 备忘录&…

ROS | 标准消息包std_msgs和common_msgs

std_msgs Duration:相对时间 可正可负 Time:绝对时间 一定大于0 Header:记录时间戳的结构体 MultiArrayDimension,MultiArrayLayout:描述数组的结构体 common_msgs visualization_msgs 图形显示包 几何消息包: 传感器消息包:

必应崩了?

目录 今天使用必应发现出现了不能搜索,弹出乱码的情况。 搜了一下,发现其他人也出现了同样的问题。 使用Edge浏览器的话,可以试着改一下DNS,有可能会恢复正常(等官方修复了记得改回来) 使用谷歌浏览器打开…

A股翻车现场

英伟达业绩炸裂,但今天A股这边不仅没喝着汤,还再度上演大型翻车现场,人家不仅股价大涨7个点还站上1000美元大关, 而咱A股里的英伟达,AI,TMT相关概念股,包括工业(富联)&am…

蓝牙Classic加密算法设计和实现,SAFER+,E0,E1,E2,E3(python)

概述 之前用python给大家实现了所有LE相关加密工具算法。bobwenstudy/BluetoothCryptographicToolbox: LE SMP加密算法设计和实现(python) (github.com),最近重温了下Classic加密,顺便将Classic所有加密算法给实现了一遍。 在蓝牙Classic Spec中&#…

【STM32项目】基于stm32智能鱼缸控制系统的设计与实现(完整工程资料源码)

实物演示效果 基于stm32智能鱼缸控制系统的设计与实现 目录: 实物演示效果 目录: 一、 绪论 1.1 项目研究目的及意义 1.1.1 选题目的 1.1.2 选题意义 1.2 国内外研究现状 1.2.1 国外发展现状 1.2.2 国内发展现状 1.3 项目研究内容 二、智能鱼缸系统总体设…

IPA酒精清洁笔:打印机打印头、相机镜头等光学设备清洁的好帮手!

打印机打印头、相机镜头等光学设备在长期使用的过程中,会产生油脂、污渍和灰尘等污染物杂质,从而影响到打印质量、镜头清晰度等。通过IPA酒精清洁笔可以简便快捷、安全有效的清除这些污染物杂质,保持设备表面的清洁度,从而确保设备…

列举几个淘宝商品详情API接口测试示例

API名:item_get 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,item_get,item_search_shop等]cacheString否[yes…

MyBatis入门——MyBatis XML配置文件(3)

目录 一、配置连接字符串和MyBatis 二、写持久层代码 1、添加 mapper 接口 2、添加 USerInfoXmlMapper.xml 3、测试类代码 三、增删改查操作 1、增(Insert) 返回自增 id 2、删(Delete) 3、改(update&#xf…

Java中Spring MVC 来如何接收表单数据

目录 一、Java语言介绍 二、Spring MVC 框架介绍 三、什么是表单 四、Spring MVC 来如何接收表单数据 一、Java语言介绍 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems公司的James Gosling等人开发。它最初于1995年发布,被设计为具有…

Android Studio 与 Gradle 及插件版本兼容性

Android Studio 开始新项目时,会自动创建其中部分文件,并为其填充合理的默认值。 项目文件结构布局: 一、Android Gradle 及插件作用: Android Studio 构建系统以 Gradle 为基础,并且 Android Gradle 插件 (AGP) 添加…

利用远控工具横向

一.横向移动介绍和方式 1.介绍 内网渗透的横向移动是指攻击者在成功进入内网后,通过利用内部系统的漏洞或者获取的合法访问权限,从一个受感染的系统向其他系统扩散或移动。这种横向移动的目的通常是为了获取更多的敏感信息、提升权限、扩大攻击面或者更…

记录踩坑事件 分页查询order by出现重复数据bug

MySQL排序小坑_mysql order by name相同导致排序混乱-CSDN博客 1、问题描述 列表页分页查询出现重复数据。 2、问题排查 排查最终执行sql日志。 select * from tableA where (start_time>2024-04-17 00:00:00) AND (start_time<2024-05-18 00:00:00) ORDER BY sta…

rocketmq 学习二 基本概念

教程&#xff1a;基本概念 | RocketMQ 视频教程 https://www.bilibili.com/video/BV1d5411y7UW?vd_sourcef1bd3b5218c30adf0a002c8c937e0a27 版本&#xff1a;5.0 一 基本概念 1.1 生产者/Producer 1.1.1 定义 消息发布者。是构建并传输消息到服务端的运行实体。…