关于vuex的学习实践笔记


Posted in Javascript onApril 05, 2017

Vuex 简介

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

例如(travel store):

import * as types from '../types'
//数据
const state = {
 travelsList: [],
 searchKey: {
  page: 0,
  limit: 20
 },
 scroll: true
}
//用户行为(可以处理异步),触发 mutations 来改变 state
const actions = {
 /**
  * 获取约跑步列表
  */
 getTravelsList({ commit }) {
  if(state.scroll) {
   commit(types.GET_TRAVELS_PAGE_NUM)
   commit(types.COM_LOADING_STATUS, true),
   commit(types.GET_TRAVELS_SCORLL_STATUS, false)
   api.TravelsList()
    .then(res => {
     console.log(res)
     commit(types.COM_LOADING_STATUS, false),
     commit(types.GET_TRAVELS_SCORLL_STATUS, true)
     commit(types.GET_TRAVELS_LIST, res)
    })
  }
 },
 /**
  * 参加
  */
 joinTravel({ commit }, id) {
 ...
 }
}
//可以过滤 state 中的数据
const getters = {
 travelsList: state => state.travelsList,
 travelListIndex: state => state.travelsList.slice(0,4)
}
//唯一能改变 state 的方法(纯函数)
const mutations = {
 [types.GET_TRAVELS_LIST](state, res) {
  if(state.searchKey.page <= 1) {
   state.travelsList = res.data
  } else {
   state.travelsList = state.travelsList.concat(res.data)
  }
 },
 [types.GET_TRAVELS_SEARCH_KEY](state, params) {
  state.searchKey = params
 },
 [types.GET_TRAVELS_PAGE_NUM](state) {
  state.searchKey['page'] += 1
 },
 [types.GET_TRAVELS_SCORLL_STATUS](state, status) {
  state.scroll = status
 }
}
//导出一个 travel store 模块
export default {
 state,
 actions,
 getters,
 mutations
}

每一个 Vuex 应用的核心就是 store(仓库)。”store” 基本上就是一个容器,它包含着你的应用中大部分的状态(state)数据。

Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。

你不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交(commit) mutations。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。

用一张图来理解一下

关于vuex的学习实践笔记

客户端(Client) -> action -> mutations -> state -> 客户端

可以看出在vuex中数据是单一流向的:视图(view)触发action,action提交(commit)到mutations,mutations改变state(数据),state的改变,相应的组件也会相应的更新。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
jquery 操作表格实现代码(多种操作打包)
Mar 20 Javascript
javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)
Jul 04 Javascript
JavaScript设计模式之抽象工厂模式介绍
Dec 28 Javascript
IE中鼠标经过option触发mouseout的解决方法
Jan 29 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
Dec 06 Javascript
js编写三级联动简单案例
Dec 21 Javascript
JavaScript数组和对象的复制
Mar 21 Javascript
bootstrap警告框示例代码分享
May 17 Javascript
使用socket.io实现简单聊天室案例
Jan 02 Javascript
Vue数据双向绑定原理及简单实现方法
May 18 Javascript
详解如何webpack使用DllPlugin
Sep 30 Javascript
ES6 proxy和reflect的使用方法与应用实例分析
Feb 15 Javascript
详解基于webpack和vue.js搭建开发环境
Apr 05 #Javascript
ionic2打包android时gradle无法下载的解决方法
Apr 05 #Javascript
使用gulp搭建本地服务器并实现模拟ajax
Apr 05 #Javascript
Vue.js render方法使用详解
Apr 05 #Javascript
self.attachevent is not a function的解决方法
Apr 04 #Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
Apr 04 #Javascript
Vue.js实战之使用Vuex + axios发送请求详解
Apr 04 #Javascript
You might like
PHP企业级应用之常见缓存技术篇
2011/01/27 PHP
php使用filter过滤器验证邮箱 ipv6地址 url验证
2013/12/25 PHP
MyEclipse常用配置图文教程
2014/09/11 PHP
微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
2014/10/21 PHP
thinkphp3.2.2实现生成多张缩略图的方法
2014/12/19 PHP
thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
2016/05/19 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
获取Javscript执行函数名称的方法
2006/12/22 Javascript
jquery 最简单的属性菜单
2009/10/08 Javascript
js下通过prototype扩展实现indexOf的代码
2010/12/08 Javascript
JS关键字球状旋转效果的实例代码
2013/11/29 Javascript
js或jquery实现页面打印可局部打印
2014/03/27 Javascript
setinterval()与clearInterval()JS函数的调用方法
2015/01/21 Javascript
JavaScript实现列表分页功能特效
2015/05/15 Javascript
javascript实现网站加入收藏功能
2015/12/16 Javascript
使用jQuery或者原生js实现鼠标滚动加载页面新数据
2016/03/06 Javascript
Angular 4.X开发实践中的踩坑小结
2017/07/04 Javascript
JavaScript实现二叉树的先序、中序及后序遍历方法详解
2017/10/26 Javascript
解决 viewer.js 动态更新图片导致无法预览的问题
2019/05/14 Javascript
ES5和ES6中类的区别总结
2020/12/21 Javascript
[00:31]DOTA2上海特级锦标赛 Fnatic战队宣传片
2016/03/04 DOTA
[01:30]我们共输赢 完美世界城市挑战赛开启全新赛季
2019/04/19 DOTA
linux 下实现python多版本安装实践
2014/11/18 Python
自动化Nginx服务器的反向代理的配置方法
2015/06/28 Python
不可错过的十本Python好书
2017/07/06 Python
利用Opencv中Houghline方法实现直线检测
2018/02/11 Python
不到40行代码用Python实现一个简单的推荐系统
2019/05/10 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
2019/11/11 Python
django实现模板中的字符串文字和自动转义
2020/03/31 Python
国外平面设计第一市场:99designs
2016/10/25 全球购物
优秀党支部事迹材料
2014/01/14 职场文书
房地产促销活动方案
2014/03/01 职场文书
采购员岗位职责范本
2015/04/07 职场文书
公司行政主管岗位职责
2015/04/09 职场文书
升学宴来宾致辞
2015/07/27 职场文书
2016年师德学习心得体会
2016/01/12 职场文书