详解vuex的简单使用


Posted in Javascript onMarch 12, 2018

1 目录的配置

根据官方推荐在src目录里面创建store目录

2 创建store里面的文件

根据官方推荐创建 actions.js, getters.js,index.js, mutations.js, mutations-types.js, state.js

2.1 state.js

state.js: 是vuex的单一状态数,用一个对象就包含了全部的应用层级状态。至此它便作为一个『唯一数据源(SSOT)』而存在。这也意味着,每个应用将仅仅包含一个 store 实例。单一状态树让我们能够直接地定位任一特定的状态片段,在调试的过程中也能轻易地取得整个当前应用状态的快照。(用来管理所有vuex状态数据)

/*
* 是vuex的单一状态数,用一个对象就包含了全部的应用层级状态
* 单一状态树让我们能够直接地定位任一特定的状态片段,在调试的过程中也能轻易地取得整个当前应用状态的快照。(用来管理所有vuex状态数据)
*
*/

const state = {

 // 城市状态,用来管理城市
 city: {},
 cityList: [],
 fullScreen: true,
 palyer: false
};

export default state;

2.2 mutations-types.js 存取mutations相关的字符常量 (一些常量)

/*
* 存取mutations相关的字符常量
*
*/

// 定义常量并导出
export const SET_CITY = 'SET_CITY';
export const SET_PLAY = 'SET_PLAY';
export const SET_FULL_SCREEN = 'SET_FULL_SCREEN';
export const SET_CITY_LIST = 'SET_CITY_LIST';

2.3 mutations.js (定义修改的操作)

更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。Vuex 中的 mutations 非常类似于事件:每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数

/*
 * 更改 Vuex 的 store 中的状态的唯一方法是提交 mutation
 * Vuex 中的 mutations 非常类似于事件:每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数
 */

// 导入mutation-type.js里面所有的常量
import * as types from './mutation-types';

// 定义一个mutation可以供设置和修改值
const mutations = {

 /*
 * 1 表达式作为属性表达式放在方括号之内
 * 2 形参state (获取当前状态树的state)
 * 3 形参city,是提交mutation时传的参数
 * 4 使用mutation便于书写方便
 * 5 这个操作相当于往state.js里面写入city
  */
 [types.SET_CITY](state, city) {
  state.city = city;
 },
 [types.SET_CITY_LIST](state, list) {
  state.cityList = list;
 },
 [types.SET_FULL_SCREEN](state, flag) {
  state.fullScreen = flag;
 },
 [types.SET_PLAY](state, palyState) {
  state.palyer = palyState;
 }
};

// 导出mutation
export default mutations;

2.4 getters.js 有时候我们需要从 store 中的 state 中派生出一些状态。

mapGetters 辅助函数仅仅是将 store 中的 getters 映射到局部计算属性

/*
* 有时候我们需要从 store 中的 state 中派生出一些状态
* 这里的常量主要是对state里面做一些映射
* mapGetters 辅助函数仅仅是将 store 中的 getters 映射到局部计算属性
*/

// 对state里面的属性做一些映射

export const city = state => state.city;  // 箭头函数的简写
export const cityList = state => state.cityList;
export const fullScreen = state => state.fullScreen;
export const palyer = state => state.palyer;

2.5 actions.js

Action 类似于 mutation,不同在于:

  1. Action 提交的是 mutation,而不是直接变更状态。
  2. Action 可以包含任意异步操作。
  3. 在一个动作中多次改变mutation可以封装一个action
/*
* actions类似mutation
* 区别:
* 1:action提交的是mutation
* 2:action可以包含任意异步操作
*/

/*
 * 使用:
 * 1:在一个动作中多次改变mutation可以封装一个action
 */

import * as types from './mutation-types';

export const selectList = function ({commit, state}, {list, index}) {
 commit(types.SET_CITY_LIST, list);
 commit(types.SET_PLAY, false);
 commit(types.SET_FULL_SCREEN, true);
};

2.6 index.js入口

/*
* 入口
*/

import Vue from 'vue';
import Vuex from 'vuex';

// import * as obj from 'xxxx'; 会将xxxx中所有export导出的内容组合成一个对象返回。
import * as actions from './actions';

// 拿到getters里面的映射
import * as getters from './getter';
import state from './state';
import mutations from './mutations';
import createdLogger from 'vuex/dist/logger';

Vue.use(Vuex);
const debug = process.env.NODE_ENV != 'production';

export default new Vuex.Store({
 actions,
 getters,
 state,
 mutations,
 strict: debug,
 plugins: debug ? [createdLogger()] : []
});

3 使用

3.1 在mian.js注册store

在main.js里面new的Vue的实例里面注册store

3.2 写入值,要在组件中引入mapMutations的语法糖

引入语法糖

import {mapMutations, mapActions} from 'vuex';

在methods里面mapMutations 辅助函数将组件中的 methods 映射为 store.commit 调用

...mapMutations({
 // 这里和mutation里面的常量做一个映射
 setCity: 'SET_CITY'
})

在需要的地方写入值

this.setCity(city);

3.3获取值

获得vuex中的值,要在组件中引入mapGetters(mapGetters 辅助函数仅仅是将 store 中的 getters 映射到局部计算属性)

引入mapGetters

import {mapGetters} from 'vuex';

在computed计算属性里面使用对象展开运算符将 getters 混入 computed 对象中

computed: {
  // 这里面的city映射的是state.js里面的city
  // 可以映射多个值
  ...mapGetters([
   'city',
   'cityList',
   'palyer',
   'fullScreen'
  ])
 }

拿到值

created() {
  console.log(this.city);
  console.log(this.cityList[1]);
  console.log(this.palyer);
  console.log(this.fullScreen);
 }

3.4 action存入值

...mapActions(['selectList'])

在需要存入的地方使用

this.selectList({
 list: this.citys,
 index: 1
});

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
通用JS事件写法实现代码
Jan 07 Javascript
Jquery 高亮显示文本中重要的关键字
Dec 24 Javascript
Javascript 中的类和闭包
Jan 08 Javascript
仅IE6/7/8中innerHTML返回值忽略英文空格的问题
Apr 07 Javascript
我的Node.js学习之路(三)--node.js作用、回调、同步和异步代码 以及事件循环
Jul 06 Javascript
javascript简单实现图片预加载
Dec 03 Javascript
JavaScript列表框listbox全选和反选的实现方法
Mar 18 Javascript
JavaScript获取网页表单提交方式的方法
Apr 02 Javascript
js预加载图片方法汇总
Jun 15 Javascript
在JavaScript的AngularJS库中进行单元测试的方法
Jun 23 Javascript
javascript数据类型验证方法
Dec 31 Javascript
javascript实现文件拖拽事件
Mar 29 Javascript
js提取中文拼音首字母的封装工具类
Mar 12 #Javascript
基于express中路由规则及获取请求参数的方法
Mar 12 #Javascript
Node.JS段点续传:Nginx配置文件分段下载功能的实现方法
Mar 12 #Javascript
javascript变量提升和闭包理解
Mar 12 #Javascript
浅谈angular4.0中路由传递参数、获取参数最nice的写法
Mar 12 #Javascript
Vue 仿QQ左滑删除组件功能
Mar 12 #Javascript
JS中touchstart事件与click事件冲突的解决方法
Mar 12 #Javascript
You might like
ThinkPHP 防止表单重复提交的方法
2011/08/08 PHP
php compact 通过变量创建数组
2016/11/15 PHP
PHP常见加密函数用法示例【crypt与md5】
2019/01/27 PHP
XRegExp 0.2: Now With Named Capture
2007/11/30 Javascript
Jquery实现的一种常用高亮效果示例代码
2014/01/28 Javascript
编写简单的jQuery提示插件
2014/12/21 Javascript
angularJS中router的使用指南
2015/02/09 Javascript
JavaScript中的Reflect对象详解(ES6新特性)
2016/07/22 Javascript
老生常谈Javascript中的原型和this指针
2016/10/09 Javascript
jquery实现刷新随机变化样式特效(tag标签样式)
2017/02/03 Javascript
vue.js利用defineProperty实现数据的双向绑定
2017/04/28 Javascript
详解Vue使用命令行搭建单页面应用
2017/05/24 Javascript
详解开源的JavaScript插件化框架MinimaJS
2017/10/26 Javascript
Es6 Generator函数详细解析
2018/02/24 Javascript
详解vue引入子组件方法
2019/02/12 Javascript
vue遍历对象中的数组取值示例
2019/11/07 Javascript
python实现隐马尔科夫模型HMM
2018/03/25 Python
Python读取YUV文件,并显示的方法
2018/12/04 Python
python3中eval函数用法使用简介
2019/08/02 Python
基于pycharm实现批量修改变量名
2020/06/02 Python
美国最顶级的精品店之一:Hampden Clothing
2016/12/22 全球购物
美国婴童服装市场上的领先品牌:Carter’s
2018/02/08 全球购物
Java文件和目录(IO)操作
2014/08/26 面试题
精彩的英文自荐信
2014/01/30 职场文书
中班中秋节活动反思
2014/02/18 职场文书
售后服务承诺书
2014/03/26 职场文书
公司演讲稿开场白
2014/08/25 职场文书
社保转移委托书范本
2014/10/08 职场文书
2015年秋季新学期寄语
2015/03/25 职场文书
村党组织公开承诺书
2015/04/30 职场文书
电影开国大典观后感
2015/06/04 职场文书
换届选举主持词
2015/07/03 职场文书
给校长的建议书作文400字
2015/09/14 职场文书
Mysql systemctl start mysqld报错的问题解决
2021/06/03 MySQL
Python实现批量自动整理文件
2022/03/16 Python
Redis特殊数据类型HyperLogLog基数统计算法讲解
2022/06/01 Redis