vuex总结

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具 devtools extension,提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能。

上面是官网对vuex的解释,然而还是不能确切知道vuex是什么,下面我就来说一下我对vuex的理解以及在使用过程中的心得体会。

vuex就像一个无形的仓库,公共的状态我们会抽离出来放进里面。vuex的核心主要包括以下几个部分

  • state
  • mutations
  • getters
  • actions
  • modules

    state里面就是存放的我们上面所提到的状态

    mutations就是存放如何更改状态

    getters就是从state中派生出状态,比如将state中的某个状态进行过滤然后获取新的状态。

    actions就是mutation的加强版,它可以通过commit mutations中的方法来改变状态,最重要的是它可以进行异步操作。

    modules顾名思义,就是当用这个容器来装这些状态还是显得混乱的时候,我们就可以把容器分成几块,把状态和管理规则分类来装。这和我们创建js模块是一个目的,让代码结构更清晰。

下面我们使用vuex来做一个小功能

安装vuex

cnpm install vuex --save-dev

那么如何使用呢?

我们以一个vue项目来说明下,这个项目也是我看的第一个项目,和作者沟通好了的。我在这里只是简单的来说一下实现的思路 算是借花献佛吧 ,大家有兴趣的可以克隆下来好好琢磨

! 卖座电影

首先我们需要在type.js中定义mutations事件类型,比如改变左侧侧边栏的状态。type.js如下

export const CHANGE_LEFTNAV_STATUS = 'CHANGE_LEFTNAV_STATUS

我们的sidebar.vue组件刚开始是看不到的,只有点击头部菜单的按钮才会出现,所以一开始这个侧边组件会有一个初始状态,我们可以这样去写

<div class="sidebar-container" @click='hideNav' v-show="show">

然后我们在计算属性中这样写

show:function(){
return this.$store.getters.leftNavState
}
由于我们在vue实例中注入了vuex 所以我们可以通过this.$store来访问需要的仓库,我们在com.js中这样写
    import * as types from '../types'
/**
* App通用配置
*/
const state = { leftNavState:false
} const actions = { //左侧导航栏的开关
changeLeftNavState({commit},status){
commit(types.CHANGE_LEFTNAV_STATUS,status)
}
}
const getters = { leftNavState: state => state.leftNavState
}
const mutations = {
[types.CHANGE_LEFTNAV_STATUS](state,status){
state.leftNavState = status
}
} export default {
state,
actions,
getters,
mutations
}

当访问this.$store.getters.leftNavState我们会得到它的值state=>state.leftNavState相当于传入state参数,返回state.leftNavState的值,由于我们在state中声明了leftNavState:false所以this.$store.getters.leftNavState得到的值为false所以就不会看到侧边栏组件,当然当你改成true的时候就会看到了

这里需要说明一个一个完整的module 需要包括四个部分state,getters actions mutations,state来存放需要操作的状态 gettes类似于计算属性,改变数据有只能通过提交到mutations方式,一种是异步的,定义在actions然后提交到mutation,通过dispach来分发,另外一种是同步的直接通过commit来触发

然后我们来实现侧边栏的点击显示

我们在header.vue中这样写

<a class="go-menu" @click="showNav"><i class="icon iconfont icon-menu"></i></a>

然后在methods中这样写

showNav: function () {
return this.$store.dispatch('changeLeftNavState', true)
}

正如上面所说异步的点击事件定义在actions中通过dispach分发,所以this.$store.dispatch会唤醒定义在actions中的方法

    changeLeftNavState({commit},status){
commit(types.CHANGE_LEFTNAV_STATUS,status)
}
//actions中的事件需要提交到mutations
const mutations = {
[types.CHANGE_LEFTNAV_STATUS](state,status){
state.leftNavState = status
}
}

这样仓库中的state.leftNavState的值就变成了你传入的值true。从而我们就看到了侧边栏组件

同样道理我们如果要点击隐藏这个组件那么就在sidebar.vue中这样写

<div class="sidebar-container" @click='hideNav' v-show="show">

然后我们在methods中这样写

methods:{
hideNav(){
this.$store.dispatch('changeLeftNavState',false)
}
}

这样我们就利用vuex完成了一个点击事件类型.

具体vuex到底是如何使用的,还是需要大家自己去看文档摸索的。任何项目都可以看做一个公式在我看来,我们不需要死机公式,我们要理解这个公式,这个公式就像一条线,能让我们一提起来vue就知道如何快速构建和实现一个vue项目,可以试着自己总结下。这个项目一定会让你学到很多的。

vuex到底是个啥的更多相关文章

  1. vuex到底是什么?

    vuex到底是什么? 使用vue也有一段时间了,但是对vue的理解似乎还是停留在初始状态,究其原因,不得不说是自己没有深入进去,理解本质,导致开发效率低,永远停留在表面, 更坏的结果就是refresh ...

  2. 挑战全网最幽默的Vuex系列教程:第一讲 Vuex到底是什么鬼

    先说两句 官方已经有教程了,为什么还要写这个教程呢?说实话,还真不是我闲着蛋疼,官方的教程真的是太官方了,对于刚入门 Vuex 的童鞋来说,想必看官方的教程,很多地方就如同看圣经一样,比如「欧玛尼玛尼 ...

  3. 4.VUEX到底是什么

    关于vuex类的新闻最近很多,看到眼热就去查了下资料,然后扯出来一堆flux.redux.state.state之类的概念,以及大型工程必要性之类的.看官方手册也是昏昏然. 然而,我还是弄懂了!我准备 ...

  4. 理解vuex的状态管理模式架构

    理解vuex的状态管理模式架构 一: 什么是vuex?官方解释如下:vuex是一个专为vue.js应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证以一种可预测的 ...

  5. Vue(三):vuex是什么

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

  6. Vuex 入门指南

    1.Vuex是什么? 我们还是像以往一样先看一看官方文档对此的解读(Vuex 是什么? · GitBook) Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的 ...

  7. 浅谈vuex

    很多技术,刚接触的时候:这是啥?用的时候:哟嚯,是挺好用的!加以研究:卧槽,就是这么个逼玩意儿! 最近接手了一个别人写了1/5的vue项目(页面画了1/3,接口啥都没对); 对于表格中的数据项操作以及 ...

  8. 一篇搞定Vuex

    1.简介 首先,你必须明显明白vuex到底是干啥的,主要解决开发中的哪些问题? Vuex是一个专门为Vue.js应用程序开发的状态管理模式,它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证 ...

  9. 五分钟搞懂Vuex

    这段时间一直在用vue写项目,vuex在项目中也会依葫芦画瓢使用,但是总有一种朦朦胧胧的感觉.于是决定彻底搞懂它. 看了一下午的官方文档,以及资料,才发现vuex so easy! 作为一个圈子中的人 ...

随机推荐

  1. string、const char*、 char* 、char[]相互转换(待整理)

    string.const char*. char* .char[]相互转换(全) https://blog.csdn.net/rongrongyaofeiqi/article/details/5244 ...

  2. vertx 从Tcp服务端和客户端开始翻译

    写TCP 服务器和客户端 vert.x能够使你很容易写出非阻塞的TCP客户端和服务器 创建一个TCP服务 最简单的创建TCP服务的方法是使用默认的配置:如下 NetServer server = ve ...

  3. 使用webpy创建一个简单的restful风格的webservice应用

    下载:wget http://webpy.org/static/web.py-0.38.tar.gz解压并进入web.py-0.38文件夹安装:easy_install web.py 这是一个如何使用 ...

  4. Py之pandas:dataframe学习【转载】

    转自:https://www.tutorialspoint.com/python_pandas/python_pandas_dataframe.htm 1.数据框4特性 列是不同类型的数据元素. 每列 ...

  5. Android中Activity的四种开发模式

    Activity的四种启动模式:standard.singleTop.singleTask.singleInstance   清单文件中的Activity配置使用:android:launchMode ...

  6. MVC增加操作日志

    在后台管理中,有一些操作是需要增加操作日志的,尤其是对一些比较敏感的金额类的操作,比如商城类的修改商品金额.删除商品.赠送金额等人工的操作.日志中记录着相关操作人的操作信息,这样,出了问题也容易排查. ...

  7. 软件包管理:rpm命令管理-校验和文件提取

    校验主要用于判断文件是否做了更改 修改标志: 会用-V,会看输出结果即可. 当有误操作,比如删了某一个文件,只需知道他属于哪一个rpm包,可用提取找回覆盖就行.并不把整个rpm包安装,而是提取其中的某 ...

  8. PowerDesigner 表格导出为excel

    PD菜单栏中,依次点击 Tools ->Excute Commands->Edit/Run Script.. 填入 '*********************************** ...

  9. ZOJ 3949 Edge to the Root

    题意: 在一棵树中,可以从根节点往其他节点加一条边,使得根节点到其他所有节点的距离和最小,输出最小的距离和. 思路: 我们考虑在加的一条边为$1 \to v$,那么在树上从$1 \to v$的路径上, ...

  10. hdu5145 莫队算法

    这题说的是个了n个数字 然后 在L 和R 区间内的数字的排列有多少种方案, 这里我们通过 将 这n长度的字符串 分成sqrt(n) 块然后 一个属性 他们的l 属于 那个快  以这个为第一关键字 ,然 ...