作为一款个人认为非常牛x的框架,个人使用起来得心应手,所以近期就记录一下这款框架吧。

首先说一说

Vuex 是什么?

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

 

相信很多新选手看完这段话有种绝望的感觉。开始我也是这样的,后来我想到了一个比方!

比如某年级有5个小班,每个小班有25个同学,但是只有一个老师授课,假如5个小班就对应着5个组件,每个班的25个同学就相当于每个组件中的25条数据,这个老师就相当于 vuex ,老师讲的课就相当于每一条数据。要保证每个同学受到同样的教育,就需要这个老师把每节课分别讲5遍,还不能保证每个班的同学听到的效果相同。一段时间后,老师觉得这样特别麻烦还很累,就想了一个办法,找了一个大教室,把这5个小班的同学合并到一起,这样每个课程只需要讲一次就好啦,而且还保证了每个班的同学听到的效果相同。这就是 vuex 的作用,把各个组件中用到的数据统一管理,同步发放,省时省心省力。

那这个 vuex 怎么用呢?让我们从一个简单的 Vue 计数应用开始

一、基本用法

1. 初始化并创建一个项目

vue init webpack-simple vuex-demo
cd vuex-demo
npm install

2. 安装 vuex

npm install vuex -S

3. 在 src 目录下创建 store.js 文件,并在 main.js 文件中导入并配置

store.js 中写入

  1. import Vue from 'vue'
  2. //引入 vuex 并 use
  3. import Vuex from 'vuex'
  4. Vue.use(Vuex)

main.js 文件

  1. import Vue from 'vue'
  2. import App from './App.vue'
  3. import store from './assets/store' //导入 store 对象
  4. new Vue({
  5. //配置 store 选项,指定为 store 对象,会自动将 store 对象注入到所有子组件中,在子组件中通过 this.$store 访问该 store 对象
  6. store,
  7. el: '#app',
  8. render: h => h(App)
  9. })
4. 编辑 store.js 文件

在应用 vuex 之前,我们还是需要看懂这个流程图,其实很简单。

 
vuex

Vue Components 是我们的 vue 组件组件会触发(dispatch)一些事件或动作( Actions);
② 我们在组件中发出的动作,肯定是想获取或者改变数据的,但是在 vuex 中,数据是集中管理的,我们不能直接去更改数据,所以会把这个动作提交(Commit)到 Mutations 中;
③ 然后 Mutations 就去改变(Mutate)State 中的数据;
④ 当 State 中的数据被改变之后,就会重新渲染(Render)到 Vue Components (组件)中去, Vue Components (组件)展示更新后的数据,完成一个流程。

Vuex 的 核心Store(仓库),相当于是一个容器,一个 Store 实例中包含以下属性的方法:

state 定义属性(状态 、数据)
getters 用来获取属性
actions 定义方法(动作)
commit 提交变化,修改数据的唯一方式就是显示的提交 mutations
mutations 定义变化,处理状态(数据)的改变
mapGetters 用来获取属性(数据)
mapActions 用来获取方法(动作)

store.js 中写入

  1. // 定义属性(数据)
  2. var state = {
  3. count:6
  4. }
  5. // 创建 store 对象
  6. const store = new Vuex.Store({
  7. state
  8. })
  9. // 导出 store 对象
  10. export default store;
方式1、 在 app.vue 中就能通过 this.$store 访问该 store 对象 ,获取该 count

其中需要注意的是 this.$store 中的 store 与 main.js 中配置的 store 相对应,一定要注意大小写

  1. <template>
  2. <div id="app">
  3. //把 count 方法直接写入,可自己执行
  4. <h1>{{count}}</h1>
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. name: 'app',
  10. computed:{
  11. count(){
  12. //返回获取到的数据
  13. return this.$store.state.count
  14. }
  15. }
  16. }
  17. </script>

执行

npm run dev

就能在页面中看到传过来的数据了

方式2、vuex 提供的 mapGettersmapActions 来访问

mapGetters 用来获取属性(数据)

① 在 app.vue 中引入 mapGetters

  1. import {mapGetters} from 'vuex'

② 在 app.vue 文件的计算属性中调用 mapGetters 辅助方法,并传入一个数组,在数组中指定要获取的属性 count

  1. <script>
  2. import {mapGetters,mapActions} from 'vuex'
  3. export default {
  4. name: 'app',
  5. computed:mapGetters([
  6. //此处的 count 与以下 store.js 文件中 getters 内的 count 相对应
  7. 'count'
  8. ])
  9. }
  10. </script>

③ 在 store.js 中定义 getters 方法并导出

getters 用来获取属性

  1. import Vue from 'vue'
  2. import Vuex from 'vuex'
  3. Vue.use(Vuex)
  4. // 定义属性(数据)
  5. var state = {
  6. count:6
  7. }
  8. // 定义 getters
  9. var getters={
  10. //需要传个形参,用来获取 state 属性
  11. count(state){
  12. return state.count
  13. }
  14. }
  15. // 创建 store 对象
  16. const store = new Vuex.Store({
  17. state,
  18. getters
  19. })
  20. // 导出 store 对象
  21. export default store;

这样页面上就会显示传过来的数据了!接下来我们来通过动作改变获取到的数据

④在 store.js 中定义 actionsmutations 方法并导出

actions 定义方法(动作)
commit 提交变化,修改数据的唯一方式就是显示的提交 mutations
mutations 定义变化,处理状态(数据)的改变

  1. import Vue from 'vue'
  2. import Vuex from 'vuex'
  3. Vue.use(Vuex)
  4. // 定义属性(数据)
  5. var state = {
  6. count:6
  7. }
  8. // 定义 getters
  9. var getters={
  10. count(state){
  11. return state.count
  12. }
  13. }
  14. // 定义 actions ,要执行的动作,如流程的判断、异步请求
  15. const actions ={
  16. // ({commit,state}) 这种写法是 es6 中的对象解构
  17. increment({commit,state}){
  18. //提交一个名为 increment 的变化,名字可自定义,可以认为是类型名,与下方 mutations 中的 increment 对应
  19. //commit 提交变化,修改数据的唯一方式就是显式的提交 mutations
  20. commit('increment')
  21. }
  22. }
  23. // 定义 mutations ,处理状态(数据) 的改变
  24. const mutations ={
  25. //与上方 commit 中的 ‘increment’ 相对应
  26. increment(state){
  27. state.count ++;
  28. }
  29. }
  30. // 创建 store 对象
  31. const store = new Vuex.Store({
  32. state,
  33. getters,
  34. actions,
  35. mutations
  36. })
  37. // 导出 store 对象
  38. export default store;

⑤ 在 app.vue 中引入 mapActions ,并调用

mapActions 用来获取方法(动作)

  1. import {mapGetters,mapActions} from 'vuex'

调用 mapActions 辅助方法,并传入一个数组,在数组中指定要获取的方法 increment

  1. <template>
  2. <div id="app">
  3. //这个 increment 方法与下面 methods 中的 increment 相对应
  4. <button @click="increment">增加</button>
  5. <button>减少</button>
  6. <h1>{{count}}</h1>
  7. </div>
  8. </template>
  9. <script>
  10. import {mapGetters,mapActions} from 'vuex'
  11. export default {
  12. name: 'app',
  13. computed:mapGetters([
  14. 'count'
  15. ]),
  16. methods:mapActions([
  17. //该 increment 来自 store.js 中导出的 actions 和 mutations 中的 increment
  18. 'increment',
  19. ])
  20. }
  21. </script>

这样就能通过 button 来改变获取到的 count 了。

现在你可以通过 storel.state 来获取状态对象,以及通过 store.commit 方法触发状态变更

注意:我们通过提交 mutation 的方式,而非直接改变 store.state.count ,是因为我们想更明确地追踪到状态的变化。

这是通过点击事件让 count++ ,不妨自己试着写一下 count-- 吧!

看起来确实是挺绕的,需要在理解了原理的情况下,再细细琢磨,加深理解。

NO.01---今天聊聊Vuex的简单入门的更多相关文章

  1. vue的挖坑和爬坑之vuex的简单入门

    首先vuex的中文文档https://vuex.vuejs.org/zh-cn/ 首先vuex是什么,官方解释是 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应 ...

  2. vuex最简单、最直白、最全的入门文档

    前言 我们经常用element-ui做后台管理系统,经常会遇到父组件给子组件传递数据,下面一个简单的例子,点击按钮,把弹框显示变量数据通过子组件的props属性传递,子组件通过$emit事件监听把数据 ...

  3. vuex最简单、最详细的入门文档

    如果你在使用 vue.js , 那么我想你可能会对 vue 组件之间的通信感到崩溃 . 我在使用基于 vue.js 2.0 的UI框架 ElementUI 开发网站的时候 , 就遇到了这种问题 : 一 ...

  4. Springmvc整合tiles框架简单入门示例(maven)

    Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...

  5. Web---演示Servlet的相关类、表单多参数接收、文件上传简单入门

    说明: Servlet的其他相关类: ServletConfig – 代表Servlet的初始化配置参数. ServletContext – 代表整个Web项目. ServletRequest – 代 ...

  6. Vue的简单入门

    Vue的简单入门 一.什么是Vue? vue.js也一个渐进式JavaScript框架,可以独立完成前后端分离式web项目 渐进式:vue可以从小到控制页面中的一个变量后到页面中一块内容再到整个页面, ...

  7. Python 简单入门指北(一)

    Python 简单入门指北(一) Python 是一门非常容易上手的语言,通过查阅资料和教程,也许一晚上就能写出一个简单的爬虫.但 Python 也是一门很难精通的语言,因为简洁的语法背后隐藏了许多黑 ...

  8. scons 简单入门

    scons 简单入门 摘自:https://www.jianshu.com/p/e4bd3ab9e5d6 0.2042019.01.20 12:58:44字数 1201阅读 3021 简单入门 hel ...

  9. 一篇文章带你了解网页框架——Vue简单入门

    一篇文章带你了解网页框架--Vue简单入门 这篇文章将会介绍我们前端入门级别的框架--Vue的简单使用 如果你以后想从事后端程序员,又想要稍微了解前端框架知识,那么这篇文章或许可以给你带来帮助 温馨提 ...

随机推荐

  1. spring使用Redis自定义前缀后缀名(去掉SimpleKey []+自定义)

    spring中自动加上 SimpleKey [] 解决方案 一.自定义后缀名 1.定义类实现KeyGenerator接口 MyKeyGenerator package com.wbg.springRe ...

  2. STM32F103 ucLinux开发之二(内核启动汇编代码分析)

    start_kernel之前的汇编代码分析 Boot中执行下面两句话之后,进入uclinux内核. theKernel = (void (*)(int, int, unsigned int))((ui ...

  3. 使用Vue构建单页应用一

    一. 环境准备 1 安装Node.js  最好安装node.js-6.X.X 以上版本,https://nodejs.org/en/    我使用的是  v6.3.1 Current 版本.Node. ...

  4. Visual Studio 中常用的快捷键

    项目相关的快捷键 Ctrl + Shift + B = 生成项目 Ctrl + Alt + L = 显示 Solution Explorer(解决方案资源管理器) Shift + Alt+ C = 添 ...

  5. 在jsp页面动态添加数据库中的内容

    工具:myeclipse+oracle11g 1.首先新建一个jsp页面. 2.在src目录下新建实体类User.java 3.创建BaseDao用来链接数据库 4.在pl/sql中创建存储过程 5. ...

  6. Python记录键盘鼠标敲击次数

    Idea 作为一个每天有一半时间都在电脑旁的人,无时无刻不在敲击着键盘,点击着鼠标.有一天,我突然很想知道在一天的时间内,在我轻盈的指法下面,键盘被我狂敲了多少下,鼠标又被我点击了多少次.甚至更具体一 ...

  7. Ubuntu18.04安装完应该做的一些事 显卡驱动安装和cuda8.0

    博主装Ubuntu18.04主要是为了用于跑深度学习,所以我们先来搞搞gcc环境 第一步:安装多版本gcc.g++可切换 sudo apt-get install gcc-4.8 gcc-4.8-mu ...

  8. 也说java虚拟机

              学习java的人如果不了解java虚拟机,那真是白学了.    java为什么可以跨平台,就是因为虚拟机的作用,java虚拟机就相当于一个计算机,它有自己的内存结构,当java程序 ...

  9. restframework中的那些参数你知道吗?

    序列化是很重要的过程, 在构建数据结构的时候, 往往会出现很多意想不到的问题, 有一些参数你要用, 但是没有办法穿过来, 怎么办> 今天这篇博客就是写我之前的一个小项目中用restframewo ...

  10. php无限级分类----封装函数

    public function catetree($cateRes){//传递过来的数据资源 return $this->sort($cateRes); 调用函数 } public functi ...