关于vuex的使用

news2024/11/27 4:28:55

1.首先安装vuex

npm install vuex --save

这时如果直接安装vuex,不指定版本的话,就会直接安装最新的vuex的版本。所以会出现报错。

报错就安装这个

npm install --save vuex@3

2.创建文件夹,

有的时候安装好会自动创建vuex的文件夹 ,也就是store文件夹

如果没有该文件夹,就自己创建一个,并且创建一个index.js文件

import Vue from "vue";
import Vuex from "vuex";

// 需要使用插件一次
Vue.use(Vuex)

//    引入小仓库
import goods from "./goods";
import search from "./search";
import user from './user'
// 对外暴露Store类的一个实例
export default new Vuex.Store({
    // 实现Vuex仓库模块式开发存储数据
    modules:{
        goods,
        search,
        user
    }

})

这里为什么会有另外三个文件夹?而且为什么要引入这三个文件?

        因为为了结构清晰,我们把需要用到的数据都分别放,如商品数据就放在goods文件夹下面的

        index.js里面,搜索所需要的数据就放在search下的index.js里面,用户登陆后的信息就放在

        user下的index.js里面,然后再在主文件index.js里面引入这样小仓库,就可以在大仓库里面统

        一管理了

3.创建小仓库

那上面的小仓库里面的数据怎么写呢?

一般的模板为下

// state:仓库储存数据的地方
const state = {
    //state 中的默认初始值别瞎写,服务器返回什么,默认值就为什么
}
// mutations:修改state的唯一手段,只有mutations可以修改state的数据
const mutations = {
}
// actions:处理action,可以书写自己的业务逻辑,也可以处理异步
const actions = {
    // 这里可以书写业务逻辑,但是不能修改直接修改state,要提交mutations,让mutations提交
}
// getters:理解为计算属性,用于简化仓库数据,让组件获取仓库的数据更加方便
const getters = {}

// 对外暴露Store类的一个实例
export default {
    state,
    mutations,
    actions,
    getters
}

我们这里以user下的index.js为例

这里只是写了一下如何在vuex中请求数据接口,当然也可以不写

看清步骤,是先在actions里面获取到异步数据,然后将数据传给mutations,然后mutations再将数据存在state里面

// 引入用户登录接口和获取用户信息接口
import { reqUserLogin, reqUserInfo} from "@/api"

//引入路由,使vuex里面可以实现路由跳转
import router from '@/router/index'
//引入elementUi的提示框模块,为下面的登录成功显示消息提示框
import { Message } from 'element-ui';

// 3.state:仓库储存数据的地方
const state = {
    //state 中的默认初始值别瞎写,服务器返回什么,默认值就为什么
    UserInfo:{}
}
// 2.mutations:修改state的唯一手段,只有mutations可以修改state的数据
const mutations = {
    // 函数
    USERINFO(state,UserInfo){
        // 将数据存入state中
        state.UserInfo = UserInfo
    },  
}
// 1.actions:处理action,可以书写自己的业务逻辑,也可以处理异步
const actions = {
    // 请求用户信息
    async UserInfo({commit}){
        let userInfo =  await reqUserInfo()
        // 将用户信息存入mutations
        commit('USERINFO',userInfo.data)     
    },
    // 这里可以书写业务逻辑,但是不能修改直接修改state,要提交mutations,让mutations提交
    // dispatch是异步操作,commit是同步操作,因为下面需要用到异步操作,这里得把dispatch写进去,第二个参数data为调用接口所需要的参数
    async UserLogin({dispatch},data){
        // 请求接口数据
        await reqUserLogin(data).then( res =>{
            // 接口数据返回成功
            if(res.status == 0){
                // 成功提示
              Message.success(res.message);
            //   将登录成功的token放在session中
              window.sessionStorage.setItem('token',res.token);
            //   登录成功后,跳转到上一个页面(也就是你在哪点的登录,登录成功后,就跳回哪个页面)
              router.go(-1);
            //   我们需要在登录成功后,拿到用户id,然后调用请求用户信息的接口,该接口在上面的userInfo里面请求
            //   因为要使用这个调用接口函数,而且它是异步的,所以就需要用到dispatch,第一个参数为函数名,第二个参数为接口参数
              dispatch('UserInfo',res.userId);
            }else{
                // 数据请求失败提示
              Message.error(res.message);
            }
          });
    },

}
// getters:理解为计算属性,用于简化仓库数据,让组件获取仓库的数据更加方便
const getters = {}

// 对外暴露Store类的一个实例
export default {
    state,
    mutations,
    actions,
    getters
}

4.在main.js里面挂载vuex

 

5.在组件中使用actions异步操作函数

mutations同步函数只需要将dispatch改为commit即可

这里还是以上面的user下的index.js为例

我们可以在任一组件中使用该方法

$store为上面挂载在全局的vuex,dispatch为actions里的异步操作
如果是mutatios里面的同步操作就可以使用commit
第一个参数为异步函数的方法名,第二个参数为函数所需要的参数,也就函数里面接口调用需要的参数
this.$store.dispatch('UserLogin',{username,password})

6.在组件中使用state里面的数据

首先在需要使用的组件里面的script里面引入vuex,并用展开运算符展开它

import {mapState} from 'vuex'
export default {
   computed:{
    ...mapState({
            userInfo:(state) => {  
                //因为把vuex展开了,并且我们使用了user小仓库,
                //这里先使用state然后接user就是使用user里面的state的UserInfo数据         
                let result = state.user.UserInfo
                return result
            }
        })
   }
};

7.防止页面刷新后数据丢失

因为vuex是响应式的,刷新会清空数据,我们为了防止该情况,就把数据存在本地一份

在App.vue里面的created钩子函数里面操作

created() {
    if (sessionStorage.getItem('store')) {
      this.$store.replaceState(Object.assign({}, this.$store.state, JSON.parse(sessionStorage.getItem('store'))));
    }
    window.addEventListener('beforeunload', () => {
      sessionStorage.setItem('store', JSON.stringify(this.$store.state));
    });
  },

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

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

相关文章

Python解题 - CSDN周赛第35期 - 不算题解的题解

本期四道题还是全考过,题解在网上也都搜得到。。。只好继续水一份不算题解的题解。 第一题:交换后的or 给定两组长度为n的二进制串,请问有多少种方法在第一个串中交换两个不同位置上的数字,使得这两个二进制串“或”的结果发生改…

案例01-修改数据redis没有同步更新

目录 一:背景介绍 二:思路&方案 三:过程 1.修改数据没有删除缓存 2.修改数据删除了缓存 四:总结 五:升华 一:背景介绍 redis中存储了关于一个课程下多个班级的信息。但是难免会在一个课程下添加新…

pandas 数据预处理+数据概览 处理技巧整理(持续更新版)

这篇文章主要是整理下使用pandas的一些技巧,因为经常不用它,这些指令忘得真的很快。前段时间在数模美赛中已经栽过跟头了,不希望以后遇到相关问题的时候还去网上查(主要是太杂了)。可能读者跟我有一样的问题&#xff0…

程序员养发神器:拒绝加班熬夜,告别秃头!

身为一个程序员,每天的工作就是写代码和吹牛逼,但是代码写多了,都没有多少让自己吹的时间了。摸鱼时间少是我们太菜了吗?可不要小瞧自己,可能是你没掌握方法。 我自己本身就是一个十分疯狂的工具收集者,收…

实在智能RPA数字员工竞技“宝罗杯”机器人创新总决赛,斩获佳绩!

近日,由中国钢铁工业协会和中国自动化学会指导,中国宝武钢铁集团有限公司主办、宝信软件承办的机器人行业领域的“宝罗杯”机器人创新大赛总决赛在中国宝武上海总部圆满收官。 此次大赛旨在充分凝聚社会智力,聚焦工业机器人的应用场景&#x…

es深度分页原因概念及处理方法

概述 当使用es分页查询的时候,如果查询的数据太靠后了,就会产生深度分页问题。 假设es有3个节点,node1,node2,node3 查询 limti 50000,50 假设请求的是node1,此时会在每个节点上抓出 50050条数据,然后在node1汇总排序&#xff0…

【设计模式】装饰器模式

装饰器模式 以生活中的场景来举例,一个蛋糕胚,给它涂上奶油就变成了奶油蛋糕,再加上巧克力和草莓,它就变成了巧克力草莓蛋糕。 像这样在不改变原有对象的基础之上,将功能附加到原始对象上的设计模式就称为装饰模式(D…

如何查看磁盘空间并挂载磁盘

df -h内容参数含义Filesystem文件系统Size分区大小1k-blocks单位是1KB(使用df查看)Used已用容量Avail还可用的容量Use%已用百分比Mounted on挂载点du -h查看某目录下占用空间最多的文件或目录。取前10个。需要先进入该目录下。du -cks * | sort -rn | head -n 10参数含义-s对每…

腾讯游戏,“迷失”自己

【潮汐商业评论/原创】“那个号我忘记密码了,你等我换个新号跟你玩”。这是Lynn《王者荣耀》双排队友常说的话。因为未成年,账号只有周末能玩,而且只有两小时。所以Lynn的这位网友,经常用家长的手机号注册游戏账号,但是…

Yarn调度器和调度算法

目录 1 先进先出调度器(FIFO) 2 容量调度器(Capacity Scheduler) 3 公平调度器(Fair Scheduler) 缺额: 公平调度器队列资源分配方式 公平调度器资源分配算法 Hadoop作业调度器主要有三种&…

分库分表原理

一、数据库瓶颈 会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是,可用数据库连接少甚至无连接可用。接下来就可以想象了吧(并发量、吞吐量、崩溃)。 IO瓶颈-分库和垂直分表…

探索测试的一些总结

1)探索性测试与脚本化测试的主要区别:1)探索性测试将更多更高的认知水平的工作放在测试执行,而脚本化测试则更关注测试设计;2)前者更强调测试活动的并行和相互反馈(学习、设计、执行与结果分析等),而后者的测试活动是相对串行的。 2)脚本化测…

Grafana系统的备份、恢复、迁移

Grafana系统的备份、恢复、迁移 1. 备份Grafana相关数据 首先先关闭Grafana服务(systemctl stop grafana-server),到目录下备份以下文件或者目录: 备份grafana目录中的grafana.db(一般情况下路径:/var/l…

电子技术——数字IC技术,逻辑电路和设计方法

电子技术——数字IC技术,逻辑电路和设计方法 在我们之前的学习中,我们学习了CMOS技术,然而CMOS技术并不是唯一的数字逻辑技术,因此,本节系统的介绍当今使用的数字技术和逻辑电路族。 数字IC技术和逻辑电路族 逻辑电…

k8s--services(微服务)

文章目录一、k8s网络通信service和iptables的关系二、services1.简介2.默认3.IPVS模式的service4.clusterip5.headless6.从外部访问service的三种方式(1)nodeport(2)loadbalancer7.metallb一、k8s网络通信 k8s通过CNI接口接入其他…

tf_nndistancen 安装

为了评估MMD,断断续续装了4天,踩了几乎所有的坑,终于装上了QAQ 1. 库链接:pointnet-autoencoder/tf_ops/nn_distance at master charlesq34/pointnet-autoencoder GitHub 2. 安装TensorFlow,我的环境是cuda 11.5 ,…

【Go】用Go在命令行输出好看的表格

用Go在命令行输出好看的表格前言正文生成Table表头设置插入行表格标题自动标号单元格合并列合并行合并样式设置居中设置数字自动高亮标红完整Demo代码结语前言 最近在写一些运维小工具,比如批量进行ping包的工具,实现不困难,反正就是ping&am…

java(Class 常用方法 获取Class对象六种方式 动态和静态加载 类加载流程)

ClassClass常用方法获取Class对象六种方式哪些类型有Class对象动态和静态加载类加载流程加载阶段连接阶段连接阶段-验证连接阶段-准备连接阶段-解析初始化阶段获取类结构信息Class常用方法 第一步:创建一个实体类 public class Car {public String brand "宝…

mysql数据库innodb存储引擎之事务原理

事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作要求,即这些操作要么同时成功,要么同时失败。 四大特性: redo log和undo log:一致性、原子性…

Map和Set总结

Map和Set Map和Set是专门用来进行搜索的数据结构,适合动态查找 模型 搜索的数据称为关键字(key),关键字对应的叫值(value),key-value键值对 key模型key-value模型 Map存储的就是key-value模型,Set只存储了key Map Map是接口类…