详解vue中vuex的用法
创始人
2024-04-30 21:58:14

前言

说到 vuex 相信大家都不陌生,vuex 是一个专为 vue.js 应用程序开发的状态管理模式。vuex 背后的基本思想,就是单向数据流。今天我们就来好好聊聊 vuex

在这里插入图片描述


vuex?

用官方的话来说,vuex 是一个专为 vue.js 应用程序开发的状态管理模式 + 库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。


状态管理?

状态就是数据。状态管理可以简单理解为把需要多个组件共享的变量全部存储在一个对象里面。然后将这个对象放在顶层的 vue 实例中,让其他组件可以使用。通过使用 vuex 可集中管理组件之间的数据(状态),使组件之间的数据共享变得简单。


如何安装 vuex?

1. 通过 npm 方式安装。

npm i vuex --save
npm i vuex@3.6.2 --save //安装特定版本
yarn add vuex //yarn安装方式

2. 在 main.js 中引入,然后挂载到 Vue 实例里。

import Vue from 'vue'
import store from './store'
new Vue({render: h => h(App),store
}).$mount('#app')

3. 在 scr 目录下创建一个 store/index.js 文件,写入以下内容。

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const state = {}
const getters = {}
const mutations = {}
const actions = {}export default new Vuex.Store({state,getters,mutations,actions,
})

vuex 的核心

一、state

state 简单来说就是一个状态,用户界面会随着 state 变化而变化。


栗子:

store/index.js 文件

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const state = {name: "金闯",age: 18,count: 0
}
const getters = {}
const mutations = {}
const actions = {}export default new Vuex.Store({state,getters,mutations,actions,
})

任意 .vue 文件中使用



页面效果

在这里插入图片描述

使用语法糖辅助函数(mapState)⤵


二、getter

getter 就是一个计算属性。对 state 数据进行计算(会被缓存),类似于 vue 组件中的 computed,对 state 里的数据进行一些过滤、改造等等,例如我们要在 state.count 的基础上派生出一个新的状态 newCount 出来,就适合使用 getter 属性。


栗子:

store/index.js 文件

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const state = {count: 5
}
const getters = {newCount: state => state.count * 6
}
const mutation = {}
const actions = {}export default new Vuex.Store({state,getters,mutation,actions,
})

任意 .vue 文件中使用




页面效果

在这里插入图片描述

使用语法糖辅助函数(mapGetters)⤵


三、mutation

mutation 就是改变状态,唯一可修改 state 数据的场所。


栗子:

store/index.js 文件

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const state = {count: 0
}
const getters = {}
const mutations = {addWay(state, num) {state.count = state.count + num;console.log(state.count);},minusWay(state) {state.count--;console.log(state.count);},
}
const actions = {}export default new Vuex.Store({state,getters,mutations,actions,
})

任意 .vue 文件中使用



页面效果

在这里插入图片描述

使用语法糖辅助函数(mapMutations)⤵


四、action

action 就是一个异步操作,提交 mutation 执行异步操作(不是直接变更状态)。主要是用来解决异步流程来改变 state 数据。因为 mutation 是同步操作,如果你在 mutation 里进行异步操作,你会发现并不会起任何效果,故只能通过 action=>mutation=>state 流程修改。


栗子:

store/index.js 文件


import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const state = {count: 0
}
const getters = {}
const mutations = {minusWay(state) {state.count--;console.log(state.count);},
}
const actions = {asyncAdd(context) {setTimeout(() => {context.commit("minusWay")}, 500)}
}export default new Vuex.Store({state,getters,mutations,actions,
})

任意 .vue 文件中使用



页面效果

在这里插入图片描述

使用语法糖辅助函数(mapActions)⤵


五、modules

vuex 允许我们将 store 分割到模块。目的是为了让代码更好维护,让多种数据分类更加明确,每个模块都拥有独立的 state、mutation、action、getter ,甚至是嵌套子模块从上至下进行类似下面的拆分:

const moduleA = {state: {},mutations: {},actions: {},getters: {},
}const moduleB = {state: {},mutations: {},actions: {},getters: {},
}const store = new Vue.store({modules: {moduleA,moduleB}
})

vuex 辅助函数(语法糖)

辅助函数可以把 vuex 中的数据和方法映射到 vue 组件中。达到简化操作的目的。


一、mapState(state)

栗子:




二、mapGetters(getter)

栗子:




三、mapMutations(mutation)

栗子:




四、mapActions(action)

栗子:



相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
如何吸引顾客 怎样吸引顾客加入... 如何激活群的顾客活跃度,是商家在运营过程中绕不开的事情。当新用户来到商家的私域流量群时,商家一般会采...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
地铁怎么买票 乘坐地铁如何买票 目前,上海轨道交通全网络运营里程已增至831公里,线路增至20条,与此同时,轨道交通的支付方式也日益...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...