关于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 Select操作方法集合脚本之家特别版
May 17 Javascript
js获取对象为null的解决方法
Nov 21 Javascript
iframe中使用jquery进行查找的方法【案例分析】
Jun 17 Javascript
通过sails和阿里大于实现短信验证
Jan 04 Javascript
ionic2打包android时gradle无法下载的解决方法
Apr 05 Javascript
React BootStrap用户体验框架快速上手
Mar 06 Javascript
详解vue文件中使用echarts.js的两种方式
Oct 18 Javascript
详解Node.js一行命令上传本地文件到服务器
Apr 22 Javascript
微信小程序rich-text富文本用法实例分析
May 20 Javascript
浅谈vue3中effect与computed的亲密关系
Oct 10 Javascript
vue 取出v-for循环中的index值实例
Nov 09 Javascript
javascript json对象小技巧之键名作为变量用法分析
Nov 11 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
慎用preg_replace危险的/e修饰符(一句话后门常用)
2013/06/19 PHP
采用thinkphp自带方法生成静态html文件详解
2014/06/13 PHP
PHP实现文件上传功能实例代码
2017/05/18 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
用显卡加速,轻松把笔记本打造成取暖器的办法!
2013/04/17 Javascript
jquery选择器、属性设置用法经验总结
2013/09/08 Javascript
js 本地预览的简单实现方法
2014/02/18 Javascript
JS基于面向对象实现的放烟花效果
2015/05/07 Javascript
javascript实现3D变换的立体圆圈实例
2015/08/06 Javascript
jQuery实现的省市联动菜单功能示例【测试可用】
2017/01/13 Javascript
JS实现一个简单的日历
2017/02/22 Javascript
JavaScript中最常见的三个面试题解析
2017/03/04 Javascript
微信小程序 中wx.chooseAddress(OBJECT)实例详解
2017/03/31 Javascript
jQuery访问浏览器本地存储cookie、localStorage和sessionStorage的基本用法
2017/10/20 jQuery
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
js删除数组中的元素delete和splice的区别详解
2018/02/03 Javascript
完美解决iview 的select下拉框选项错位的问题
2018/03/02 Javascript
Node.js Stream ondata触发时机与顺序的探索
2019/03/08 Javascript
javascript获取元素的计算样式
2019/05/24 Javascript
[06:49]2018DOTA2国际邀请赛寻真——VirtusPro傲视群雄
2018/08/12 DOTA
Python实现的监测服务器硬盘使用率脚本分享
2014/11/07 Python
详谈Python2.6和Python3.0中对除法操作的异同
2017/04/28 Python
Python实现的寻找前5个默尼森数算法示例
2018/03/25 Python
pywinauto自动化操作记事本
2019/08/26 Python
Tensorflow 使用pb文件保存(恢复)模型计算图和参数实例详解
2020/02/11 Python
python一些性能分析的技巧
2020/08/30 Python
HTML5之SVG 2D入门12—SVG DOM及DOM操作介绍
2013/01/30 HTML / CSS
HTML5的download属性详细介绍和使用实例
2014/04/23 HTML / CSS
复古风格的女装和装饰品:ModCloth
2017/12/29 全球购物
Mountain Hardwear官网:攀岩服装和户外装备
2019/09/26 全球购物
C&A巴西网上商店:时尚、衣服、手机和鞋子
2020/06/07 全球购物
创业计划书如何编写
2014/02/06 职场文书
银行优秀员工事迹材料
2014/05/29 职场文书
写给女朋友的保证书
2015/05/09 职场文书
机关干部纪律作风整顿心得体会
2016/01/23 职场文书
Python中常见的导入方式总结
2021/05/06 Python