关于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跨页面保存变量做菜单的方法
Jan 17 Javascript
淘宝搜索框效果实现分析
Mar 05 Javascript
Javascript模块化编程(三)require.js的用法及功能介绍
Jan 17 Javascript
表单序列化与jq中的serialize使用示例
Feb 21 Javascript
JavaScript中最简洁的编码html字符串的方法
Oct 11 Javascript
Node.js开发之访问Redis数据库教程
Jan 14 Javascript
Bootstrap图片轮播组件Carousel使用方法详解
Oct 20 Javascript
微信公众号开发 实现点击返回按钮就返回到聊天界面
Dec 15 Javascript
vue2.0 路由不显示router-view的解决方法
Mar 06 Javascript
微信小程序使用echarts获取数据并生成折线图
Oct 16 Javascript
基于VUE实现简单的学生信息管理系统
Jan 13 Vue.js
JS数组的常用方法整理
Mar 31 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 array_push 数组函数
2009/12/26 PHP
深入PHP运行环境配置的详解
2013/06/04 PHP
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
2013/06/18 PHP
php使用ICQ网关发送手机短信
2013/10/30 PHP
浅析php数据类型转换
2014/01/09 PHP
接收键盘指令的脚本
2006/06/26 Javascript
JS array 数组详解
2009/03/22 Javascript
跟着JQuery API学Jquery 之三 筛选
2010/04/09 Javascript
使用Firebug对js进行断点调试的图文方法
2011/04/02 Javascript
在jQuery ajax中按钮button和submit的区别分析
2012/10/07 Javascript
js实现图片点击左右轮播
2015/07/08 Javascript
JS 拦截全局ajax请求实例解析
2016/11/29 Javascript
fetch 使用及如何接收JS传值
2017/11/11 Javascript
JS实现的3des+base64加密解密算法完整示例
2018/05/18 Javascript
如何在Angular应用中创建包含组件方法示例
2019/03/23 Javascript
使用watch在微信小程序中实现全局状态共享
2019/06/03 Javascript
浅谈JavaScript 声明提升
2020/09/14 Javascript
[40:04]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
python 实现将多条曲线画在一幅图上的方法
2019/07/07 Python
Python 200行代码实现一个滑动验证码过程详解
2019/07/11 Python
Python实现Singleton模式的方式详解
2019/08/08 Python
Python 求数组局部最大值的实例
2019/11/26 Python
python实现数据结构中双向循环链表操作的示例
2020/10/09 Python
css3 条纹化和透明化表格Firefox下测试成功
2014/04/15 HTML / CSS
纯CSS实现设置半个字符的样式
2014/07/03 HTML / CSS
Sofmap官网:日本著名的数码电器专卖店
2017/05/19 全球购物
法制宣传教育方案
2014/05/09 职场文书
党的群众路线教育实践活动党员个人剖析材料
2014/10/08 职场文书
教师三严三实心得体会
2014/10/11 职场文书
个人德育工作总结
2015/03/05 职场文书
傲慢与偏见电影观后感
2015/06/10 职场文书
2016大一新生军训感言
2015/12/08 职场文书
创业计划书之干洗店
2019/09/10 职场文书
Go语言中的UTF-8实现
2021/04/26 Golang
Django cookie和session的应用场景及如何使用
2021/04/29 Python
实战 快速定位MySQL的慢SQL
2022/03/22 MySQL