vuex是vue提供的一个集中式状态管理器,用于对数据的集中式管理。

vuex有四个重要的属性:state、mutations、actions、getters

1.vuex的使用

安装

npm install vuex

建一个文件夹(store),新建一个index文件,文件内创建状态管理器store

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

在main.js文件注册vuex

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

现在就可以使用vuex对状态进行管理了

2.vuex的四大属性

i.state

state是vuex所管理的数据存放的地方。例如我们需要集中管理的用户信息等。

state: {
user: '',
age: 0,
level: '0'
},

vuex规定不可以直接通过state直接来修改状态的值,而是通过mutations来修改(不推荐在actions内修改)

ii.mutations

mutations适用于改变vuex所管理状态,是一个纯函数,不能写异步代码

 mutations: {
setUserMassage(state, data) {
state.user = data.user;
state.age = data.age;
state.level = data.level;
}
},

自定义方法可以接收两个参数,state是状态管理属性state的实例,data表示的是该方法的参数,多个需要把参数变成一个对象。

纯函数:函数的放回结果只依赖他的参数,例如

function fn(a){
return a+1
}

上面的函数就是一个纯函数。例如下面的函数就不是一个纯函数

var b=2
function fn(a){
return a+b
}

因为该函数的返回值依赖外部变量b,所以它不是一个纯函数。

在vue文件中触发mutations

this.$store.commit(methodsName,...params)

iii.actions

actions可以把它比作一个触发器,用于触发mutations中的方法,从而改变传统

actions: {
getUserInfo({ commit },data) {
axios
.get('https://www.fastmock.site/mock/1144b5db9e5a837f7e4b2c775e8b1172/mock/text')
.then(response => {
console.log(response.data); // 得到返回结果数据
commit('setUserMassage', response.data.data);
})
.catch(error => {
console.log(error.message);
});
}

自定义方法接收两个参数,一个是对象:{commit}(固定写法),另一个是该方法的参数,可省略。

其中{commit}对象提供了commit方法用于mutations内的方法:commit方法有两个参数

要触发mutations内的方法的方法名

需要传该mutations内的方法的参数

在vue文件中触发actions

this.$store.dispatch(methodsName,...params);

Ⅳ.getter

getters相当于vue中的computed,

getters: {
levelUp(state, data) {
return state.level + 123;
}
},

有两个参数,用于和上面mutations的方法参数一样。

this.$store.getters.computerName

3,使用vuex

vuex提供了$store实例获取vuex的四大属性。

在视图上

$store.state:获取state实例

$store.commit:触发mutations的方法

$store.dispatch:触发actions内方法

$store.getters:获取getters实例

在vue实例上

需要添加“this.”获取

例如

this.$store.getters

i.简化获取

为了方便获取,vuex提供了一组映射关系用于简化获取vuex四大属性

mapState
mapActions
mapMutations
mapGetters
mapState和mapGetters需要在computed配置选项使用。
mapMutations和mapActions需要在methods配置选项使用。
<template>
<div>
<h1>主页页面</h1>
<div>{{ user }}+{{ age }}+{{ level }}</div>
</div>
</template> <script>
import { mapActions, mapState } from 'vuex';
export default {
name: 'App',
data() {
return {};
},
computed: {
...mapState(['user', 'age', 'level'])
},
methods: {
...mapActions(['getUserInfo'])
},
mounted() {
this.getUserInfo();
}
};
</script>
<style lang="less" scoped></style>

4.vuex模块化

vuex可以 单独拆分成多个模块,每个模块的vuex可以管理不同类型的状态,拿商品信息作为例子
项目结构
在index.js中定义开启命名空间
 namespaced: true,
import state from './state';
import actions from './actions';
import mutations from './mutations';
export default {
namespaced: true,
state,
mutations,
actions
};
 在外部index,js中使用modules
import Vue from 'vue';
import Vuex from 'vuex';
import axios from 'axios';
import product from './product/index';
Vue.use(Vuex);
export default new Vuex.Store({
modules: {
product:product
//product //可以写成这样
}
});
 在vue文件中使用的时候需要带上路径
this.$store.dispatch('product/getProductInfo');

或者

...mapActions({
getProductInfo: 'product/getProductInfo'
})
或者
...mapActions('product/getProductInfo',['getProductInfo'])

如果不使用命名空间进行代码隔离

mutations和actions用于的用法

即:

import state from './state';
import actions from './actions';
import mutations from './mutations';
export default {
//namespaced: true,
state,
mutations,
actions
};

获取方式可以不用带路径

this.$store.dispatch('getProductInfo');

或者

...mapActions(['getProductInfo'])

注意:使用命名空间或者不使用命名空间两种获取方式不能混用。

获取state

this.$store.state.product.productName

或者

...mapState({
productName: state => state.product.productName
}),

获取getters

this.$store.getters["product/getProductName"]

或者

...mapGetters("product", ["getProductName"])

actions.mutations和getters格式

...mapXxx("模块名",[
'方法名'
]),

只有state不同,第二个参数是一个对象

...mapState('some/module', {
a: state => state.a,
b: state => state.b
})

vuex使用和场景案例的更多相关文章

  1. 068——VUE中vuex的使用场景分析与state购物车实例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 深入MySQL用户自定义变量:使用详解及其使用场景案例

    一.前言 在前段工作中,曾几次收到超级话题积分漏记的用户反馈.通过源码的阅读分析后,发现问题出在高并发分布式场景下的计数器上.计数器的值会影响用户当前行为所获得积分的大小.比如,当用户在某超级话题下连 ...

  3. Hadoop企业开发场景案例,虚拟机服务器调优

    Hadoop企业开发场景案例 1 案例需求 ​ (1)需求:从1G数据中,统计每个单词出现次数.服务器3台,每台配置4G内存,4核CPU,4线程. ​ (2)需求分析: ​ 1G/128m = 8个M ...

  4. 【Ray Tracing The Next Week 超详解】 光线追踪2-7 任意长方体 && 场景案例

    上一篇比较简单,很久才发是因为做了一些好玩的场景,后来发现这一章是专门写场景例子的,所以就安排到了这一篇 Preface 这一篇要介绍的内容有: 1. 自己做的光照例子 2. Cornell box画 ...

  5. PHP(Mysql/Redis)消息队列的介绍及应用场景案例--转载

    郑重提示:本博客转载自好友博客,个人觉得写的很牛逼所以未经同意强行转载,原博客连接 http://www.cnblogs.com/wt645631686/p/8243438.html 欢迎访问 在进行 ...

  6. Locust性能测试2-先登录场景案例

    前言 有很多网站不登录的话,是无法访问到里面的页面的,这就需要先登录了 实现场景:先登录(只登录一次),然后访问页面->我的地盘页->产品页->项目页 官方案例 下面是一个简单的lo ...

  7. PHP(Mysql/Redis)消息队列的介绍及应用场景案例

    在进行网站设计的时候,有时候会遇到给用户大量发送短信,或者订单系统有大量的日志需要记录,还有做秒杀设计的时候,服务器无法承受这种瞬间的压力,无法正常处理,咱们怎么才能保证系统正常有效的运行呢?这时候我 ...

  8. Locust性能测试_先登录场景案例

    前言 有很多网站不登录的话,是无法访问到里面的页面的,这就需要先登录了实现场景:先登录(只登录一次),然后访问页面->我的地盘页->产品页->项目页 官方案例 下面是一个简单的loc ...

  9. Chrome 插件特性及实战场景案例分析

    一.前言 提起Chrome扩展插件(Chrome Extension),每个人的浏览器中或多或少都安装了几个插件,像一键翻译.广告屏蔽.录屏等等,通过使用这些插件,可以有效的提高我们的工作效率:但有时 ...

  10. Hive学习之四 《Hive分区表场景案例应用案例,企业日志加载》 详解

    文件的加载,只需要三步就够了,废话不多说,来直接的吧. 一.建表 话不多说,直接开始. 建表,对于日志文件来说,最后有分区,在此案例中,对年月日和小时进行了分区. 建表tracktest_log,分隔 ...

随机推荐

  1. 查看浏览器对html5的支持情况

    http://html5test.com/   视频和音频代码检测 function CheckAudio(){ var myAudio=document.createElement("au ...

  2. 【知识点】深入浅出STL标准模板库

    前几天谈论了许多关于数论和数据结构的东西,这些内容可能对初学者而言比较晦涩难懂(毕竟是属于初高等算法/数据结构的范畴了).今天打算来讲一些简单的内容 - STL 标准模板库. STL 标准模板库 C+ ...

  3. navicat premium 15 下载和激活

    Navicat Premium 15 下载地址 链接:https://pan.baidu.com/s/1bL-M3-hkEa4M-547giVjYQ?pwd=1107 推荐安装参考地址:https:/ ...

  4. C# xml与对象相互转换

    例如: 1.对象转xml(对象序列化为xml) string strImage= XmlSerializeHelper.Serialize<List<ImageSingle>> ...

  5. nginx知识点汇总

  6. 京东web端h5st—4.7逆向分析

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 aHR0cHM6 ...

  7. BOM弹窗 滚动条

     //   window.alert('弹出内容')  警告框         //   window.prompt('弹出内容') 输入框         //      以 字符串 形式 存储输入 ...

  8. 童年神机小霸王(七) Mapper

    首发公号:Rand_cs,求关注支持 Mapper mapper,这个概念来源于 memory mapping,又叫做 Memory Management Circuit,它是解决地址映射的一种电路, ...

  9. kettle从入门到精通 第四十七课 ETL之kettle mongo output 写入

    1.上一节课我们学习了mongo input读取步骤,本节课我们一起学习下mongo out 写入步骤,该步骤可以将数据写入到mongo中,如下图所示. 2. 配置mongo连接,有两种方式,如截图所 ...

  10. redis主从复制篇

    我们知道要避免单点故障,即保证高可用,便需要冗余(副本)方式提供集群服务. 而Redis 提供了主从库模式,以保证数据副本的一致,主从库之间采用的是读写分离的方式. 主从复制概述 主从复制,是指将一台 ...