Vue2.0 探索之路——vuex入门教程和思考

Vuex是什么

首先对于 vuex 是什么,我先引用下官方的解释。

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

就我的直观理解 vuex 类似于维护了一个全局的 Map对象。你可以往里存放 key-value 。然后所有的state数据操作都方法化,保证操作的可追踪和数据的干净。

Vuex应用场景

其实对于vuex的应用场景一开始我有点误区,因为我把它当做了一个从始至终类似于 localstorage的存在。后来发现一刷新页面,vuex中的state存放的数据会丢失。因为它只是在当前页面初始化生成的一个实例,你一刷新页面所有数据重新生成,数据就没了。

所以,vuex只能用于单个页面中不同组件(例如兄弟组件)的数据流通。

Vuex基础概念

vuex中涉及的概念主要有下面几点,下面做个简单的介绍和理解。

Vuex 官方文档: https://vuex.vuejs.org/zh-cn/

State

vuex的单一状态树,使用一个对象就包含了应用层的所有状态。

我的理解是,state是vuex自己维护的一份状态数据。数据的格式需要你根据业务去设计哟~~

下面是我简单设计的todolist的state状态树。

Getters

getters属性主要是对于state中数据的一种过滤,属于一种加强属性。比如你在做一个todolist,对于已完成的,你可以写一个doneTodoList的属性,在外面直接调用。其实他就是对于action和mutations的一个简化。不然你写一个doneTodoList功能,你还得写对应的action和mutation,费劲啊。

所以,总结一下,一些简单或通用的操作可以抽取到getters上来,方便在应用中引用。

Actions

action,动作。

对于store中数据的修改操作动作在action中提交。

其实action和mutation类似,但是action提交是mutation,并不直接修改数据,而是触发mutation修改数据。

Mutations

更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。

mutation中写有修改数据的逻辑。

另外mutation里只能执行同步操作。

Module

module ,模块化。

因为随着后面的业务逻辑的增多,把vuex分模块的开发会使得代码更加简洁清晰明了,比如登录一个模块,产品一个模块,这样后面改动起来也简单嘛。

下图的 todo 目录就是一个 module ,下面的 actions.js , mutations.js 就和外面的一样。

代码实践

引入vuex依赖

npm install vuex

目录结构

store.js 将vuex维护的所有数据导出供外部使用。

mutation_type.js 维护操作类型的常量字段

main.js加载

页面使用

1.读取store里的值:

this.$store.state.字段名

如果有 moudle 的话,假设叫 login ,那么取值又要变了,加上 module 名

this.$store.state.login.mobile

2.发起操作请求:

this.$store.dispatch(‘action中的方法名‘ , ‘参数‘) ;

参数你可以随便传json

3.getters的用法

this.$store.getters.filterDoned 
filterDoned 是在 todo 里写的一个 getters 方法,就这么调用噢

项目Github

写了一个小demo方便实践。对vuex不了解的朋友可以看看。纯小白写法,都能看得懂。如果觉得有所帮助可以点个star,感激不尽了~~

Demo 地址: https://github.com/XuXiaoGH/v...

Demo 预览: http://jyzhd.cc/dist/vuex/ind...

时间: 2024-10-09 03:06:17

Vue2.0 探索之路——vuex入门教程和思考的相关文章

使用vue2.0 vue-router vuex 模拟ios7操作

其实你也可以,甚至做得更好... 首先看一下效果:用vue2.0实现SPA:模拟ios7操作 与 通讯录实现 github地址是:https://github.com/QRL909109/ios7 如果您觉得可以,麻烦给一个star,支持我一下. 之前接触过Angular1.0,React,都只是学点入门,但对于Vue却觉得很容易上手,不止入门简单,插件也是很丰富的,脚手架也是便利的很... 项目分析: 1.首屏滑动解锁,并能移动小圆点 2.主屏幕  长按图标抖动,删除图标,点击小圆点的主屏幕

Vue2.0 探索之路——生命周期和钩子函数的一些理解(转)

前言 在使用vue一个多礼拜后,感觉现在还停留在初级阶段,虽然知道怎么和后端做数据交互,但是对于mounted这个挂载还不是很清楚的.放大之,对vue的生命周期不甚了解.只知道简单的使用,而不知道为什么,这对后面的踩坑是相当不利的. 因为我们有时候会在几个钩子函数里做一些事情,什么时候做,在哪个函数里做,我们不清楚. 于是我开始先去搜索,发现vue2.0的生命周期没啥文章.大多是1.0的版本介绍.最后还是找到一篇不错的(会放在最后) vue生命周期简介 咱们从上图可以很明显的看出现在vue2.0

vue2.0组件快速入门

前言 最近开始在学vue相关的内容.组件这章的内容比较多.看了http://www.cnblogs.com/keepfool/p/5625583.html这篇博客,博主总结的还比较全面也挺清晰,可是这篇博客的知识点跟实例都是基于vue 1.0版本的,所以参考这篇博客,我将vue2.0版本中的相关知识点做了一个总结.算是自己学习的一个笔记 什么是组件? 组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.我们可以将组件看成是封装好的HT

Vue2.0 探索之路——生命周期和钩子函数的一些理解

前言 在使用vue一个多礼拜后,感觉现在还停留在初级阶段,虽然知道怎么和后端做数据交互,但是对于mounted这个挂载还不是很清楚的.放大之,对vue的生命周期不甚了解.只知道简单的使用,而不知道为什么,这对后面的踩坑是相当不利的. 因为我们有时候会在几个钩子函数里做一些事情,什么时候做,在哪个函数里做,我们不清楚. 于是我开始先去搜索,发现vue2.0的生命周期没啥文章.大多是1.0的版本介绍.最后还是找到一篇不错的(会放在最后) vue生命周期简介 咱们从上图可以很明显的看出现在vue2.0

.Net Core 2.0 EntityFrameworkCore CodeFirst入门教程

最近难得有时间闲下来,研究了一下.net core 2.0,总的来说,目前除了一些第三方的库不支持外,基本上可以满足我们的项目需求了! 我们就以一个网站开发为例,搭建一个简单的三层架构,先熟悉一下.net core 2.0的开发流程!  一 .搭建项目框架 首先,我们新建项目,如图: 然后,我们分别添加.net core类库项目,NetCoreDemo.Repository(数据访问层)和NetCoreDemo.Service(服务层),项目结构如下:  二 .初始化数据库 项目中, NetCo

初学vue,vue2.0+vue-router+vuex的小项目

名字:Todos 功能:待办事项的增删改查,学习vuex的思想,充分使用了mountain和action,引入了charts 做的图表分析,支持拖拽排序和滑动设置 说明:因为没有时间搭建后台服务,直接用的locaStroge做的数据存储,也就没有用到axios,设置页面本来想做个数据导出和导入,现在也没做 ui框架用的是 vux,yd-ui,mint-ui 自己懒得写样式,就只好全用别人家的咯 别人家的不全,就只好多用几家喽 地址:https://github.com/zhaowanhua/To

vue2.0项目 calendar.js(日历组件封装)

最近一直闲来无事,便寻思着做一下自己的个人项目,也想说能使用现在比较流行的一些mvvm框架来做,于是就选用了这样的一个技术栈vue2.0+vue-router+vuex+webpack来做,做得也是多页面应用,使用vue-router,也是想说把多个功能模块化,单个模块spa,实现更高的效果.当然现在还在做的过程中,如果感兴趣可以过来star一下,哈哈,https://github.com/xiaobinwu/Wuji,git clone下来看看. 今天要说的是在做这个项目的过程中,自己想加一个

Vue2.0 全家桶开发的网页应用(参照吾记APP)

github链接 借鉴吾记APP,使用 vue2.0+vue-router+vuex 为主要技术栈,elementui做为ui框架,多模块 spa 模式,webpack2.0 负责模块打包,gulp 负责处理静态资源打包.压缩,欢迎打赏star!!! 安利一下 吾记前端构建流程 本地环境准备 安装node: * https://nodejs.org/en/download/ ("node": ">=6.0",对应需要升级node-sass,不然使用不了!) 配

vue2.0封装自己的ajax模块

最近在完成公司项目,技术栈为vue2.0+vux+vuex+webpack+echarts...另外还有vue-router及vue-loader(webpack下loader插件 可以把.vue文件 输出成组件). 考虑将ajax封装,目的有两个: 1.页面内写法简单,格式和国网平台格式一致,后期无需再更改代码 2.复用性 3.域名,端口等信息可以实现统一管理. 首先,先在components模块内定义自己的ajax,此处使用install方法,目的是可以在main.js中使用vue.use(