关于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 相关文章推荐
Js+Dhtml:WEB程序员简易开发工具包(预先体验版)
Nov 07 Javascript
用Javscript实现表单复选框的全选功能
May 25 Javascript
JavaScript表单常用验证集合
Jan 16 Javascript
深入理解JavaScript系列(47):对象创建模式(上篇)
Mar 04 Javascript
jQuery滚动加载图片实现原理
Dec 14 Javascript
第一章之初识Bootstrap
Apr 25 Javascript
非常实用的js验证框架实现源码 附原理方法
Jun 08 Javascript
JavaScript中一些特殊的字符运算
Aug 17 Javascript
打字效果动画的4种实现方法(超简单)
Oct 18 Javascript
js前端面试之同步与异步问题详解
Apr 03 Javascript
js实现for循环跳过undefined值示例
Jul 02 Javascript
vue语法自动转typescript(解放双手)
Sep 18 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
让CodeIgniter的ellipsize()支持中文截断的方法
2014/06/12 PHP
php+xml结合Ajax实现点赞功能完整实例
2015/01/30 PHP
PHP基于curl后台远程登录正方教务系统的方法
2016/10/14 PHP
js 异步操作回调函数如何控制执行顺序
2013/12/24 Javascript
每天一篇javascript学习小结(Date对象)
2015/11/13 Javascript
基于JavaScript代码实现随机漂浮图片广告
2016/01/05 Javascript
详解Node.js如何开发命令行工具
2016/08/14 Javascript
jQuery实现弹出窗口弹出div层的实例代码
2017/01/09 Javascript
分享bootstrap学习笔记心得(组件及其属性)
2017/01/11 Javascript
集成vue到jquery/bootstrap项目的方法
2018/02/10 jQuery
关于Angularjs中跨域设置白名单问题
2018/04/17 Javascript
解决修复npm安装全局模块权限的问题
2018/05/17 Javascript
JavaScript制作3D旋转相册
2020/08/02 Javascript
koa-passport实现本地验证的方法示例
2020/02/20 Javascript
[49:29]LGD vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
利用Python进行异常值分析实例代码
2017/12/07 Python
Python创建字典的八种方式
2019/02/27 Python
python实践项目之监控当前联网状态详情
2019/05/23 Python
Python 调用 Windows API COM 新法
2019/08/22 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
2020/01/13 Python
Python基础之字符串常见操作经典实例详解
2020/02/26 Python
django model object序列化实例
2020/03/13 Python
python Tornado框架的使用示例
2020/10/19 Python
Python urlopen()参数代码示例解析
2020/12/10 Python
css3新增颜色表示方式分享
2014/04/15 HTML / CSS
基于html5实现的图片墙效果
2014/10/16 HTML / CSS
Asics日本官网:鬼冢八喜郎创立的跑鞋运动品牌
2017/10/18 全球购物
Merrell美国官网:美国登山运动鞋品牌
2018/02/07 全球购物
澳大利亚玩具剧场:Toy Playhouse
2019/03/03 全球购物
专升本个人自我评价
2013/12/22 职场文书
2014年预备党员端正入党动机思想汇报
2014/09/13 职场文书
司机岗位职责范本
2015/04/10 职场文书
面试复试通知单
2015/04/24 职场文书
2016年大学生就业指导课心得体会
2015/10/09 职场文书
股东协议书范本2016
2016/03/21 职场文书
python 模拟在天空中放风筝的示例代码
2021/04/21 Python