使用Vuex的个人理解

news2024/11/17 12:32:08

一、逻辑原理

要使用 Vuex 进行集中管理数据(状态),按照 Vuex 分模块的设
计思想,先在 src 下创建 store 文件夹,然后创建一个根级别的
index.js,作为组装模块并导出 store 地方(store 对象是 vuex 的核
心对象)。
在这里插入图片描述
store下面的文件都是使用vuex所创建的,其中index.js是我们组装模块和导出store文件的地方,也就是说,store下面的其他文件基本上都要导入到index中去,我们只要导出index这一个文件可以了,它就是相对于store文件夹的代表。

vuex最重要的是三个元素,既有根级别的,也有模块级别的(user.js里面的):
states:这里就是存放集中管理数据的地方,这里主要放公共数据,例如用户的token、userinfo(个人信息)。
mutations:这里就是负责写改变stare里面数据的方法,只能写同步方法。
actions:这里就是写调用mutations里面的方法来改变state里面的值。

这里的逻辑主要是通过前端页面的按钮来触发actions里面的方法,这里actions里的方法return一个promise对象给前端,好告诉前端此操作成功与否。

this.$store.dispatch('Login',this.form)
//Login是actions里的方法,this.form是前端页面传过去的参数

接着由actions里面的方法调动mutations里面的方法来改变state里面的值

二、那么我们为什么要用vuex呢?

一般情况下,只有组件之间共享的数据才有必要存储到vuex中。
象父子组件之间传值很容易办到,但是兄弟组件下又有父子组件或者大型项目之间一层嵌套一层的传值会非常麻烦,但是我们将这些多个组件要用到的数据放到vuex中管理就非常好了,大家都可以访问到,并且存储在vuex中的数据是响应式的,都能够保持数据与页面实时同步。像用户的token值,我们访问页面经常要用到这个值,那我们就可以放入vuex中集中管理。

三、示例代码

store/index.js:

import Vue from 'vue' // vuex 是 vue 的一个插件,所以先要导入 vue
import Vuex from 'vuex' import user from './modules/user'
//引入 vuex 插件,也就是告知可以使用 Vuex 插件对象了
Vue.use(Vuex)
//实例化一个 store 对象,存储数据的仓库
const store=new Vuex.Store({
//getters, //如果有根级别的 getters、actions、mutations,也需要导出
//actions,
//mutations, modules:{
/* home,//home:home
goods */
    user
  }
})
//导出 store 对象,这样在外面(其他组件)就好使用 store
export default store

store/modules/user.js:

import {getToken,setToken,getUser,setUser,removeToken} from '@/utils/usertoken.js'//这里是封装的方法,用来操作本地存储的token、个人信息
import {login,getUserInfo,logout} from '@/api/login.js'//这里是向后台获取token、用户信息的接口
const state={
    token:getToken(),
    user:getUser()
}
const mutations={
    SET_TOKEN(state,token)
    {
        state.token=token
        setToken(token)
    },
    SET_USER(state,user)
    {
        state.user=user
        setUser(user)
    }
}
const actions={
    Login({commit},form)
    {
        return new Promise((resolve,reject)=>{
            login(form.username.trim(),form.password.trim()).then(response=>{
                const resp=response.data
                commit('SET_TOKEN',resp.data.token)
                resolve(resp)
            }).catch(error=>{
                reject(error)
            })
        })        
    },
    GetUserInfo({commit,state}){
        return new Promise((resolve,reject)=>{
            getUserInfo(state.token).then(response=>{
                const respUser=response.data
                commit('SET_USER',respUser.data)
                resolve(respUser)
            }).catch(error=>{
                reject(error)
            })
        })
    },
    Logout({commit,state})
    {
        return new Promise((resolve,reject)=>{
            logout(state.token).then(response=>{
                const resp=response.data
                commit('SET_TOKEN','')
                commit('SET_USER',null) //{}
                removeToken()
                resolve(resp)
            }).catch(error=>{
                reject(error)
            })
        })
    }
}
export default{
    state,
    mutations,
    actions
}

💕 原创不易,还希望各位大佬支持一下 \textcolor{blue}{原创不易,还希望各位大佬支持一下} 原创不易,还希望各位大佬支持一下

👍 点赞,你的认可是我创作的动力! \textcolor{orange}{点赞,你的认可是我创作的动力!} 点赞,你的认可是我创作的动力!

收藏,你的青睐是我努力的方向! \textcolor{red}{收藏,你的青睐是我努力的方向!} 收藏,你的青睐是我努力的方向!

🥕 评论,你的意见是我进步的财富! \textcolor{green}{评论,你的意见是我进步的财富!} 评论,你的意见是我进步的财富!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

xss.haozi.me通关教程

10.xss.haozi.me通关教程 0x00 首先整体浏览网站 分别是xss注入点&#xff0c;注入后的HTML代码以及网页源码 构造常规payload&#xff1a; <script>alert(1)</script> 成功通关 0x01 看到注入点是在标签中, 所以用上一题的方法是不会被解析的, 故需要去构造…

MySQL_索引

索引概述 简介 索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构&#xff08;有序&#xff09;。在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这些数据结构以某种方式引用&#xff08;指向&#xff09;数据&#xff…

OKR之剑·实战篇04:OKR执行过程优化的那些关键事

作者&#xff1a;vivo 互联网平台产品研发团队 本文是《OKR 之剑》系列之实战第 4 篇——OKR执行过程不是一成不变的&#xff0c;团队和个人在执行中不断优化执行的具体行动&#xff0c;保障OKR的高效执行。 前言 “言治骨角者&#xff0c;既切之而复磋之&#xff1b;治玉石者…

vue axios post 请求415、400、500、404报错时

vue axios post 请求415 415错误的解释&#xff0c;服务器无法处理请求附带的媒体格式。 解决方式&#xff1a; 后端参数使用了RequestBody注解进行绑定&#xff0c;用了这个注解进行数据绑定&#xff0c;只能接受数据类型为 Content-Type类型为application/json 1.后台修改&am…

notepad++ 中安装NppExec插件

一、何为NppExec简单的说&#xff0c;这个插件可以让用户在NPP中直接运行一些命令和程序&#xff0c;而不用启动这些命令和程序对应的实际工具或编译器。1. NppExec是...NppExec是介于Notepad和外部工具/编译器之间的一个中间件。它允许用户在NPP中直接运行这些工具/编译器。Np…

智能管理PoE交换机

随着网络化信息化的快速发展&#xff0c;以太网供电&#xff08;PoE&#xff09;的优势逐渐被大家所熟知。只需要一根网线&#xff0c;PoE在给网络设备供电的同时还能传输数据&#xff0c;免布线&#xff0c;节省成本和空间&#xff0c;设备可随意移动&#xff0c;系统部署灵活…

TCP/IP网络编程——域名及网络地址

完整版文章请参考&#xff1a; TCP/IP网络编程完整版文章 文章目录第 8 章 域名及网络地址8.1 域名系统8.1.1 什么是域名8.1.2 DNS 服务器8.2 IP地址和域名之间的转换8.2.1 程序中有必要使用域名吗&#xff1f;8.2.2 利用域名获取IP地址第 8 章 域名及网络地址 8.1 域名系统 …

重建大师可以实现识别地表树木吗?对数据格式有什么要求?

目前重建大师5.0具备自动单体化与切割单体化功能&#xff0c;在三维重建的过程中就可自动识别地表树木、建筑。 数据格式的话&#xff0c;目前是需要重建大师生产的倾斜模型数据&#xff0c;其他软件生产的模型暂不支持。重建大师目前并不是直接对模型数据进行深度学习识别&am…

Node.js包和模块的区别在哪儿

在Node.js 中&#xff0c;会将某个独立的功能封装起来&#xff0c;用于发布、更新、依赖管理和进行版本控制。Nodejs 根据CommonJS规范实现了包机制&#xff0c;开发了NPM包管理工具&#xff0c;用来解决包的发布和获取需求。 Node.js的包和模块并没有本质的不同&#xff0c;包…

详解linux中网络的几种模式:NAT,网桥,以及静态IP的配置和主机名

NAT模式 NAT就是网络地址转换&#xff0c;虚拟机和主机构建一个专有网络&#xff0c;通过NAT进行设备IP的转换&#xff0c;虚拟机通过共享主机的IP访问外界网络&#xff0c;但外部网络无法访问虚拟机。构建出的子网一般是WNET8. 网桥模式 也叫桥接模式&#xff0c;虚拟机直接…

Android发送广播时报错:Sending non-protected broadcast xxxxxxx from system xxxxxxxxxx

带android:sharedUserId“android.uid.system” 发送广播时&#xff0c;会出现 Sending non-protected broadcast 异常提醒&#xff1b; 原因&#xff1a; Ams在发送广播时&#xff0c;对于systemApp(系统应用)&#xff0c;会要求发送广播必须是声明在frameworks\base\core\re…

【实战项目】Django-Vue007---Redis、Python操作redis之普通连接和连接池、redis操作各种数据、django中使用redis

回顾 1、用户登录注册相关5个接口 多方式登录接口 手机号是否存在接口 发送验证码接口 验证码登录接口 验证码注册接口2、可以写验证码注册登录接口 如果手机号存在&#xff0c;直接登录成功 如果手机号不存在&#xff0c;直接创建用户&#xff0c;并且成功登录&#xff08;…

【计算机基础学科】操作系统学习笔记(考研王道参考书)

操作系统目录 文章目录操作系统目录一、操作系统概述1.1 操作系统基本概念1.1.1 操作系统的概念、功能1.1.2 操作系统的特性1.1.3 操作系统的发展与分类1.1.4 操作系统的运行机制1.2 内核态与用户态1.3 中断、异常1.4 系统调用~~1.5 计算机的层次结构~~~~1.6 操作系统引导&…

【数学建模】常用算法-主成分分析PCA的Python实现

1前言 本文主要讲解主成分分析析法&#xff08;PCA&#xff09;的python实现&#xff0c;后续会跟进实例分析 2 原理-代码实现 2.1 实现步骤 主成分分析PCA是一种应用广泛的和降维方法&#xff0c;对其实现做以下归纳 2.2 代码实现 导入包 import numpy as np定义计算协…

VBA提高篇_12 文本文件逐行读取,输入输出操作自如

文章目录一、VBA打开文本文件的4步操作二、文本输入Excel示例三、 Excel输出文本示例3.1 Open For Output3.2 Open For Append3.3 Print 打印文件3.4 工作簿 循环工作表 循环输出文件四 、先输入后输出 Demo实战演练一、VBA打开文本文件的4步操作 打开文本文件 找到指定文件并调…

看这篇就够了——ubuntu扩展屏幕及装显卡驱动后黑屏问题

1.问题说明首先说明为什么外接屏幕需要装显卡驱动&#xff0c;显卡由GPU和显存构成&#xff0c;又称为显示适配器&#xff0c;与数据的输出有密切关系。在ubuntu系统中&#xff0c;外接显示器是用的独立显卡驱动&#xff0c;而内置屏幕用的是集显驱动,也正是因为调用显卡的不同…

Day01-数据分析图鉴

文章目录Day01-数据分析图鉴一、 数据分析是什么&#xff1f;二、为什么数据分析这么火&#xff1f;三、数据分析的行业现状如何&#xff1f;四、对工作经验要求高吗&#xff1f;五、工资情况六、学完数据分析的效果&#xff1f;1、Python可视化2、TableauDay01-数据分析图鉴 …

Maven打包时出现Process terminated错误

Maven打包时出现Process terminated错误检查maven的配置文件多引入了一次控制器编码错误切点表达式错误用maven打包时出现Process terminated样式的错误&#xff0c;报错如下&#xff1a;查看报错信息 检查maven的配置文件 多引入了一次控制器 注释掉多余的 编码错误 File e…

软件设计质量(一)容错设计

出现非预期错误的原因解决方案原理介绍断根原理原理&#xff1a;将可能造成人错误的原因/条件从根本上排除断绝掉。通过冗余设计&#xff0c;屏蔽掉其中9种错误的方式&#xff1b;案例&#xff1a;USB的SD卡防写开关。4种可能性断根设计为只有1种可能是正确的。软件设计&#x…

【JavaEE初阶】第十节.多线程 (基础篇 ) 线程池(案例四)

文章目录 前言 一、线程池概述 二、线程池的使用方式 2.1 Java标准库中 线程池的使用 2.2 自己动手来模拟实现一个线程池 总结 前言 本篇文章将介绍多线程案例 —— 线程池&#xff0c;这也是一个非常有用的案例 在之前已经介绍过&#xff0c;进程本身已经能做到并发编…