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. 给师妹写的《Java并发编程之线程池十八问》被表扬啦!

    写在开头     之前给一个大四正在找工作的学妹发了自己总结的关于Java并发中线程池的面试题集,总共18题,将之取名为<Java并发编程之线程池十八问>,今天聊天时受了学妹的夸赞,心里很 ...

  2. 公司es扩容kibana添加密码访问

    准备工作 基础优化[部署好的es无需操作,新server操作] setenforce 0 getenforce sed -i 's#^SELINUX=.*$#SELINUX=disabled#g' / ...

  3. 安装centos7模板机[lvm版]

    1. 安装centos 7模板机 准备好centos7的镜像 下载地址:http://mirrors.aliyun.com/centos/7/isos/x86_64/ 安装centos 自定义硬件: ...

  4. Unity 3D 的NEW (堆内存)

    用容器装 在AWEKE NEW 运行时NEW 会导致分配内存时界面卡住, new class 的时候 才刷新程序帧 AWEKE 是程序启动时还没走完第一帧的开头执行 AWEKE 里面的代码 常量也在A ...

  5. Django路由层、视图层及模板层

    Django路由层 URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表; 你就是以这种方式告诉Django,对于客户端发来的某个UR ...

  6. Python3.7+Robot Framework+RIDE1.7.4.1安装使用教程

    一.解惑:Robot Framewprk今天我们聊一聊,Robot Framework被众多测试工程师误会多年的秘密.今天我们一起来揭秘一下,最近经常在各大群里听到许多同行,在拿Robot Frame ...

  7. 前端使用 Konva 实现可视化设计器(15)- 自定义连接点、连接优化

    前面,本示例实现了折线连接线,简述了实现的思路和原理,也已知了一些缺陷.本章将处理一些缺陷的同时,实现支持连接点的自定义,一个节点可以定义多个连接点,最终可以满足类似图元接线的效果. 请大家动动小手, ...

  8. 利用.htaccess绑定子域名到子目录

    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` 利用.htaccess绑定子域名到子目录 日期:2018- ...

  9. 博客更换新域名为52ecy.cn

    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` 博客更换新域名为52ecy.cn 日期:2017-10-2 ...

  10. __int1024!

    使用说明: 数据范围约为\(-2^{1024}\le N \le2^{1024}\),反映到十进制约为\(-10^{309}\le N \le10^{309}\),但不保证完全如此. 输入输出使用自带 ...