vue中使用vuex的超详细教程

目录
  • 一、适合初学者使用,保存数据以及获取数据
  • 二、模块化(适合有部分基础的人)

vuex是使用vue中必不可少的一部分,基于父子、兄弟组件,我们传值可能会很方便,但是如果是没有关联的组件之间要使用同一组数据,就显得很无能为力,那么vuex就很好的解决了我们这种问题,它相当于一个公共仓库,保存着所有组件都能共用的数据。

那么,我们一起来看看vue项目怎么使用它吧。(如果你对vuex有一定了解,不是刚接触的小白,请忽略第一步,直接查看第二步)

一、适合初学者使用,保存数据以及获取数据

1、在store文件夹,新建个index.js文件(命名看个人习惯,如果没有该文件夹,可以新建一个,当然也可以不建文件夹,直接新建个js文件也是可以的)

在新建的js文件中写入如下代码:

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

Vue.use(Vuex);

export default new Vuex.Store({
    state:{
        pathName: "",
        currDbSource: {},
        currJobData: {},
        DbSource: []
    },
    mutations:{
        // 保存当前菜单栏的路径
        savePath(state,pathName){
            state.pathName = pathName;
        },
        // 保存当前点击的数据源
        saveCurrDbSource(state,currDbSource){
            state.currDbSource = currDbSource;
        },
        // 保存当前点击的元数据
        saveCurrJobData(state,currJobData){
            state.currJobData = currJobData;
        },
        // 保存所有数据源
        saveDbSource(state,DbSource){
            state.DbSource = DbSource;
        }
    }
})

这里解释一下各个代码段的作用:state是自定义的一些变量,需要用来保存数据,mutations是用来触发事件,相当于方法,用户需要通过触发这个方法,借此来保存数据,参数的话,第二个参数就是用户传入的值,然后在方法中赋值给state中的变量

2、main.js引用:(注意路径即可)

// 引入vuex-store
import store from './store/index';

new Vue({
  el: '#app',
  router,
  store,
  render: h => h(App)
});

3、保存数据:(场景举例:当我点击按钮后,我需要把当前的数据保存到vuex中,然后跳转到别的路由,然后使用这些数据)

methods:{
    click(){
        // 点击按钮进行一些操作,然后保存数据
        this.$store.commit('saveCurrDbSource',this.db)
    }
}

这里的第一个参数是要触发的方法,也就是上面mutations中的方法,第二个参数是你要传递的数据

4、获取变量:(当数据初始获取不到时,可以使用计算属性用来获取)

this.$store.state.变量名

// 例如
this.$store.state.currDbSource

这样其他组件就可以共用这个保存起来的数据了,也能进行相应的修改

二、模块化(适合有部分基础的人)

当然,上述方法中我们把所有东西都写在一个文件中了,这样数据多的时候,耦合度太高,也不便于维护,而且mutations也不能解决异步问题,这里就介绍另一种方式以及actions

actions:看过官网介绍的人都知道,这是间接触发mutations方法的一种 " 中间商 ",而且它可以执行异步操作,避免用户去直接操作state

1、state.js :保存所有数据,以对象的方式导出

export default {
  pathName: '', // 路由
  currDbSource: {}, // 当前数据源
  currJobData: {}, // 当前元数据
  DbSource: [], // 所有数据源,供元数据界面下拉列表使用
  selectJobMeta: {}, // 当前选择的元数据(搜索后点击的单条数据)
  specialSubject: [], // 专题数据(多条)
  duplicateJobMeta: {}, // 复制的数据
};

2、mutations.js :保存所有方法,用来改变state的数据

// 保存当前菜单栏的路径
export const savePath = (state, pathName) => {
  state.pathName = pathName;
};

// 保存当前点击的数据源
export const saveCurrDbSource = (state, currDbSource) => {
  state.currDbSource = currDbSource;
};

// 保存当前点击的元数据
export const saveCurrJobData = (state, currJobData) => {
  state.currJobData = null;
  state.currJobData = currJobData;
};

// 保存所有数据源
export const saveDbSource = (state, DbSource) => {
  state.DbSource = DbSource;
};

// 保存搜索后选择的那一条元数据
export const saveSelectJobMeta = (state, selectJobMeta) => {
  state.selectJobMeta = selectJobMeta;
};

// 保存搜索的那一类专题
export const saveSpecialSubject = (state, specialSubject) => {
  state.specialSubject = specialSubject;
  state.selectJobMeta = {};
};

// 保存复制的元数据(名称为空)
export const saveDuplicateJobMeta = (state, duplicateJobMeta) => {
  state.duplicateJobMeta = duplicateJobMeta;
};

3、actions.js :暴露给用户使用,借此触发mutations中的方法,保存数据(可执行异步操作)

// 触发保存菜单栏的路径方法
export const savePath = ({ commit }, payload) => {
  commit('savePath', payload);
};

// 触发获取当前点击的数据源方法
export const saveCurrDbSource = ({ commit }, payload) => {
  commit('saveCurrDbSource', payload);
};

// 触发获取当前点击的元数据方法
export const saveCurrJobData = ({ commit }, payload) => {
  commit('saveCurrJobData', payload);
};

// 触发获取所有数据源方法
export const saveDbSource = ({ commit }, payload) => {
  commit('saveDbSource', payload);
};

// 触发保存搜索后选择单条元数据方法
export const saveSelectJobMeta = ({ commit }, payload) => {
  commit('saveSelectJobMeta', payload);
};

// 触发保存搜索专题数据方法
export const saveSpecialSubject = ({ commit }, payload) => {
  commit('saveSpecialSubject', payload);
};

// 触发保存复制元数据方法
export const saveDuplicateJobMeta = ({ commit }, payload) => {
  commit('saveDuplicateJobMeta', payload);
};

这里有2种方式:

// 方法一:
export const saveDbSource = (context, payload) => {
   context.commit('saveDbSource', payload);
};

// 方法二:
export const saveDbSource = ({ commit }, payload) => {
  commit('saveDbSource', payload);
};

第一种是通过 context上下文用来触发事件,一种是直接通过commit,为了保存数据,都需要加第二个参数payload,不然保存到vuex的数据就是空值

4、index.js:引入相应模块,暴露出store,供vue注册后全局使用

import Vue from 'vue';
import Vuex from 'vuex';
import state from './state';
import * as actions from './actions';
import * as mutations from './mutations';

Vue.use(Vuex);

export default new Vuex.Store({
  state,
  actions,
  mutations
});

5、main.js中引入index.js

// 引入vuex-store
import store from './store/index';

new Vue({
  el: '#app',
  router,
  store,
  render: h => h(App)
});

6、保存数据

import { mapActions } from 'vuex';

// 2种方式

// 方法一(dispatch)
this.$store.dispatch('saveDbSource', this.DbSource);

// 方法二(映射)
// 1、通过methods方法添加映射关系
methods: {
    ...mapActions(['saveDbSource'])
  }
 // 2、使用
this.saveDbSource

这里也有2种保存数据的方法,第一种就是直接操作方法,通过disptach派发给actions,让actions去触发

第二种就是通过在methods中添加映射关系,数组方式,意味着我们可以在数组中写多个方法(这里数组中的每一个方法名是actions.js文件中所定义的方法名),然后在需要使用的地方直接this.方法名即可。当然,也可以直接绑定给html中的某个事件。

值的注意的是,避免和methods中自己定义的其他方法的名字冲突

7、获取数据

import { mapState } from 'vuex';

computed: {
    ...mapState(['DbSource']),
    // 推荐写法如下:
    //...mapState({
    //    DbSource: state => state.DbSource,
    //    phoneMap: state => state.richCommunicationSuite.phoneMap, // 模块化写法
    //}),
},
watch: {
    DbSource(currVal) {
        // 监听mapState中的变量,当数据变化(有值、值改变等),
        // 保证能拿到完整的数据,不至于存在初始化没有数据的问题,然后可以赋给本组件data中的变量
      this.currVal = currVal;
    }
}

通过计算属性,当数据发生改变,我们可以保证拿到的是响应过后的数据,也是数组形式,意味着我们可以拿到多组数据,这里数组中的数据也是state.js中定义的变量(当然,更推荐使用我注释的那段代码,那种写法可以应对当state中存在多模块的情况,比如state.a.xxx,state.b.xxx,其中a和b都是两个模块,各自有对应的数据要存储,也可以自定义我们前面的名字来避免和data中数据重名的情况)

使用的时候,可以直接通过this.变量名拿到,例如本例中的 this.DbSource,我们可以把它赋给我们自定义的变量,也可以直接使用

值的注意的是,避免和data中自己定义的其他变量的名字冲突

至此,我们就完成了vuex的保存以及获取数据,希望对你有所帮助。

当然,我们需要把一vuex中的一组数据过滤,其他组件都共用过滤后的数据,这种情况大家可能会用到getters,这里我就不多赘述了,有兴趣的小伙伴可以自己了解一下。

附上vuex的运行过程,官网的图片:组件派发任务到actions,actions触发mutations中的方法,然后mutations来改变state中的数据,数据变更后响应推送给组件,组件重新渲染

到此这篇关于vue中使用vuex的超详细教程的文章就介绍到这了,更多相关vue使用vuex内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Vue3中Vuex的详细使用方法

    目录 Vuex是做什么的? 状态管理是什么? 单页面的状态管理 vuex(Vue3.2版本) 多页状态管理 vuex store对象属性介绍 Vue3中获取 store 实例对象的方法 1. state 2. mutations 3. actions 4. getters 5. modules 总结 Vuex是做什么的? Vue官方:状态管理工具 状态管理是什么? 需要在多个组件中共享的状态.且是响应式的.一个变,全都改变. 例如一些全局要用的的状态信息:用户登录状态.用户名称.地理位置信息.购

  • vuex在vite&vue3中的简单使用说明

    目录 vuex在vite&vue3的使用 一.说明 二.使用 vue3.x之vite初体验 一.项目搭建 二.附项目结构 三.附项目启动成功图 vuex在vite&vue3的使用 注:本文只讲解vite打包vue3中vuex使用 一.说明 最近vite十分火爆,在构建项目过程中,想要用到vuex,但是在晚上搜索教程过程中,发现大都为vue2以下或者非vite版本的使用. 在这里总结一下vite打包中vue3下使用vuex的使用方式以及遇到的一些坑. 二.使用 1.创建项目(通过vite命令

  • Vuex中actions的使用教程详解

    目录 简介 说明 官网 actions概述 说明 特点 用法 示例 测试 简介 说明 本文用示例介绍Vuex的五大核心之一:actions. 官网 Action | Vuex API 参考 | Vuex actions概述 说明 Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler).这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数. 特点 1.异步操作,通过m

  • Vue3中vuex的基本使用方法实例

    目录 一.基本结构 二.基本使用 三.将store中的数据模块化后的使用 1.模块化 2.使用 补充:如何改变vuex中的属性 总结 一.基本结构 src/store/index.js中,代码如下 // vue3中创建store实例对象的方法createStore()按需引入 import { createStore } from 'vuex' export default createStore({ state: { }, mutations: { }, actions: { }, gette

  • vuex中Modules的使用详解

    目录 前言 1 .什么是模块Modules 2.模块内部参数问题 3.模块命名空间问题 (1)namespaced: true 使模块成为带命名空间的模块 (2)带命名空间的绑定函数的使用 4.模块动态注册 写在最后 前言 在Vue中State使用是单一状态树结构,应该的所有的状态都放在state里面,如果项目比较复杂,那state是一个很大的对象,store对象也将对变得非常大,难于管理.于是Vuex中就存在了另外一个核心概念 modules.本文就来总结 modules 相关知识点. 1 .

  • 详解Vuex中getters的使用教程

    目录 简介 说明 官网 getters概述 说明 来源 用法 示例 测试 简介 说明 本文用示例介绍Vuex的五大核心之一:getters. 官网 Getter | Vuex API 参考 | Vuex getters概述 说明 getters 是Store的计算属性,可以对State进行计算操作.就像计算属性一样,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算. 虽然组件内也可以做计算属性,但getters 可以在多组件之间复用.如果一个状态只在一个

  • vuex存取值和映射函数使用说明

    Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 前言 vuex的执行流程 组件通过dispatch调用action,action通过commit来触发mutation,mutation来负责修改state,state修改后去重新渲染受影响的dom. 安装和引入 1.安装 npm install vuex -S 2.引入 新建:store/index.js. import vue from

  • uniapp中vuex的应用使用步骤

    目录 一.vuex是什么? 二.使用步骤 1.引入 2.state属性,主要功能为存储数据 3. Getter属性,主要功能为计算筛选数据 4. Mutation属性,Vuex中store数据改变的唯一地方(数据必须同步) 5. Action属性: 6. Module结构. 总结 一.vuex是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 按照自己理解来说就是公共数据管理模块.

  • vue中使用vuex的超详细教程

    目录 一.适合初学者使用,保存数据以及获取数据 二.模块化(适合有部分基础的人) vuex是使用vue中必不可少的一部分,基于父子.兄弟组件,我们传值可能会很方便,但是如果是没有关联的组件之间要使用同一组数据,就显得很无能为力,那么vuex就很好的解决了我们这种问题,它相当于一个公共仓库,保存着所有组件都能共用的数据. 那么,我们一起来看看vue项目怎么使用它吧.(如果你对vuex有一定了解,不是刚接触的小白,请忽略第一步,直接查看第二步) 一.适合初学者使用,保存数据以及获取数据 1.在sto

  • python中spy++的使用超详细教程

    1.spy++的基本操作 我们下载spy++: Microsoft Spy++ V15.0.26724.1 简体中文绿色版 64位 1.1 窗口属性查找 拖住中间的"寻找工具"放到想要定位的软件上,然后松开 以微信为例,我们会得到"微信"这个窗口的句柄,为"00031510",注意这个句柄是"十六进制",即"0x31510". 点击ok我们会看到更详细的属性信息 1.2 窗口spy++定位 同理拖放到&qu

  • Window server中安装Redis的超详细教程

    1.下载Window版的安装包,选择下载msi版本安装即可. 官网不支持下载window版本,只能去github上下载: Window版redis 按步骤安装完毕即可. 2.打开服务,会看到Redis服务已开启: 设置启动类型为自动. 这样每次机器重启,redis也将自动启动. 3.安装可视化界面:Another.Redis.Desktop.Manager 这是一款免费的redis操作界面,可简单的查看redis数据库.  3.设置云服务上的redis可进行远程连接: 为了后续的开发,应配置远程

  • IntelliJ IDEA中配置Tomcat超详细教程

    目录 在IntelliJ IDEA中配置Tomcat 一.下载及安装Tomcat 二.配置Tomcat环境变量 三.在IntelliJ IDEA中配置Tomcat 在IntelliJ IDEA中配置Tomcat 一.下载及安装Tomcat 1.首先进入Tomcat官网:http://tomcat.apache.org/,在Download中选择需要下载的版本,然后根据电脑系统选择64位/32位的zip,开始下载(要记住安装路径!). ps:有zip和exe两种格式的,zip(64-bit Win

  • vue+koa2搭建mock数据环境的详细教程

    前段时间写了一篇前端vue项目实现mock数据方式的文章,主要是在vue项目里使用mock数据,数据和项目耦合在一起,不太优雅,作为一个有追求的前端,怎么能容忍这种方法呢?特以此篇,记录利用koa2搭建服务端,提供mock数据的方法. 初始化vue项目 这里以vue项目为主,当然别的类型项目依然可以使用这种mock数据的方式. vue create vue-koa2-demo 前提是安装了vue-cli的脚手架,我电脑安装的是vue-cli3的版本.按照要求一步一步选择后,记得选择安装vuex,

  • scrapy+scrapyd+gerapy 爬虫调度框架超详细教程

    目录 一.scrapy 1.1 概述 1.2 构成 1.3 安装和使用 二.scrapyd 2.1 简介 2.2 安装和使用 三.gerapy 3.1 简介 3.2 安装使用 四.scrapy+scrapyd+gerapy的结合使用 4.1 创建scrapy项目 4.2 部署打包scrapy项目 4.3 运行 五.填坑 5.1 运行scrapy爬虫报错 5.2 scrapyd 运行 scrapy 报错 一.scrapy 1.1 概述 Scrapy,Python开发的一个快速.高层次的屏幕抓取和w

  • React hook超详细教程

    目录 什么是hook useState useEffect useRef useCallback useMemo useContext useReducer 什么是hook React Hook是React 16.8版本之后添加的新属性,用最简单的话来说,React Hook就是一些React提供的内置函数,这些函数可以让函数组件和类组件一样能够拥有组件状态(state)以及进行副作用(side effect) 但是不要什么业务都使用hook,请在合适的时候使用hook,否则会造成性能问题.(能

  • BootstrapValidator超详细教程(推荐)

    一.引入必要文件 下载地址:(https://github.com/nghuuphuoc/bootstrapvalidator/archive/v0.4.5.zip) <link rel="stylesheet" href="/path/to/bootstrap/css/bootstrap.css"/> <link rel="stylesheet" href="/path/to/dist/css/bootstrapVa

  • Springboot启动扩展点超详细教程小结

    1.背景 Spring的核心思想就是容器,当容器refresh的时候,外部看上去风平浪静,其实内部则是一片惊涛骇浪,汪洋一片.Springboot更是封装了Spring,遵循约定大于配置,加上自动装配的机制.很多时候我们只要引用了一个依赖,几乎是零配置就能完成一个功能的装配. 我非常喜欢这种自动装配的机制,所以在自己开发中间件和公共依赖工具的时候也会用到这个特性.让使用者以最小的代价接入.想要把自动装配玩的转,就必须要了解spring对于bean的构造生命周期以及各个扩展接口.当然了解了bean

  • 搭建PhpStorm+PhpStudy开发环境的超详细教程

    刚开始接触PHP开发,搭建开发环境是第一步,网上下载PhpStorm和PhpStudy软件,怎样安装和激活就不详细说了,我们重点来看一看怎样搭配这两个开发环境. 前提:现在假设你已经安装完PhpStorm和PhpStudy软件. 我的PhpStorm使用的是默认安装目录,这个没什么疑问的,PhpStudy软件我选择解压的目录是G:\Program Files\ . 在PhpStudy软件的解压目录下的www文件夹就是我们的网站根目录. 现在我们使用PhpStorm新建一个新工程. 第一步:打开P

随机推荐