全栈工程师Vue.js我们就爱程序媛

vuex

2017-03-10  本文已影响2582人  今年今事

作者:台湾小凡

vuex 原文文档 for Vue.js 2 (尤雨溪大神)

1.如何安装 vuex (限定开发环境为 vue-cli)


  sudo npm install -g vue-cli

  sudo vue init webpack my-project

  cd my-project

  sudo npm install

  已完成上述流程,

  sudo npm install vuex -s

其他需求,请参考 http://vuefe.cn/vuex/installation.html

2.什么是 Vuex

vuex 是什么,怎么搭,以及 要有用什么角度来理解这个插件

建立下述观念:

  1. state (状态),驱动我们应用的真实的源;
  1. view (视图),对应着 状态 的声明式映射;
  1. actions (动作),用户在 视图 上的输入引起状态的更改的可能方式。

观念讲解 : vuex,action ,mutations 做什么用的?

在讲解答案之前,先建立一个观念,vuex是一个模组,而这个模组,有 6个流程(见以下内容),请依序看完,才能对 vuex 的做基本的了解。仅对 action ,mutations这两个单字去拆解,你还是写不出 vuex 模组的配置。

同步:
当函数执行时,就得到结果,那这个函数就是同步的。

异步:
当函数执行时,不会马上有结果,甚至有时间差的问题,那这个函数就是异步的。

观念讲解 : vuex,action ,mutations 做什么用的? (1) state

中文翻译成「状态」,建议尽量用 state 这个单字来阅读 vuex 文檔,不然你脑海一直出现状态状态状态,反而会卡死。

整个 vuex 是一颗 独立的 state tree,规定:只允许 mutation ,才能改变 state

    const state = {
        count: 0
    }

观念讲解 : vuex,action ,mutations 做什么用的?(2) mutation

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

mutation,会与插件 devtools 协作,当 mutation 有变化时, 就做 state 的纪录,来协助开发者 debug,所以这里的函数要求同步,以便插件来调试。

来源:https://vuex.vuejs.org/zh-cn/mutations.html

// 建议把此区当做事件注册来看(同步不是马上执行的意思,而是在当函数执行时,就得到结果)
const mutations = {
  increment(state) {
    state.count++
  },
  decrement(state) {
    state.count--
  }
}

观念讲解 : vuex,action ,mutations 做什么用的?(3) Action

类似于 mutation,不同在于:

Action 提交的是 mutation(让 mutation 处理插件的调试工作 ),而不是直接变更 state 。

Action 的函数可以包含任意异步操作,但永远只提交 mutation。

来源:https://vuex.vuejs.org/zh-cn/actions.html

// 建议把此区当做事件注册来看, action 也不是马上就执行,只向 mutation 做 commit 的指令。

const actions = {
  increment: ({
    commit
  }) => commit('increment'),
  decrement: ({
    commit
  }) => commit('decrement'),
  incrementIfOdd({
    commit,
    state
  }) {
    if ((state.count + 1) % 2 === 0) {
      commit('increment')
    }
  },

  // 如果 action 有异步的要求时,可以参考下列的写法,对 mutation 提出 commit 。
  incrementAsync({
    commit
  }) {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        commit('increment')
        resolve()
      }, 1000)
    })
  }

观念讲解 : vuex,action ,mutations 做什么用的?(4) getters

请当做 计算属性来写,所有的 getter, 接收 完整的state树,做第一个参数

const getters = {
  evenOrOdd: state => state.count % 2 === 0 ? '偶数' : '奇数'
}

观念讲解 : vuex,action ,mutations 做什么用的?(5) (Vuex 实例依 state, mutations, actions,and getters 组合)

// 小凡 (Vuex 实例依  state, mutations, actions,and getters 组合)
export default new Vuex.Store({
  state,
  getters,
  actions,
  mutations
})

观念讲解 : vuex,action ,mutations 做什么用的?(6) .vue 使用 mapGetters, mapActions,操作 Vuex.

前面的工作做好了,到了 .vue , 就只是下指令,单纯执行 getter,action


<template>
  <div id="app">
    <!--file : /my-project/src/vuex-demo/v02_counter.vue -->
    <h1>点击: {{ $store.state.count }} 次数,此為 {{ evenOrOdd }} <br></h1>
    <button class="btn"  @click="increment">+</button>
    <button class="btn"  @click="decrement">-</button><br>
    <button class="btn"  @click="incrementIfOdd">业务设计:当 奇数时,才增加</button><br>
    <button class="btn"  @click="incrementAsync">业务设计:1秒后,才会增加 1</button><br>
  </div>
</template>

<script>
import { mapGetters, mapActions } from 'vuex'
export default {
  computed: mapGetters([
    'evenOrOdd'
  ]),
  methods: mapActions([
    'increment',
    'decrement',
    'incrementIfOdd',
    'incrementAsync'
  ])
}
</script>

Vuex 观念 demo

3.起步

进阶讲解四个重要的单字,来把 vuex state 管理机制贯穿理解

vuex 增加、减少 demo

3-1.学习 es2015

3-2.vuex 增加、减少 示例

这是尤雨溪大神写的 vuex ,加、减示例,小凡在此用 vue-cli 呈现。

vuex 增加、减少 demo

教学章节,为何会这样子排序


因为vuex,本身简单

那为何初学者, 看尤雨溪大神的的vuex代码,常常会抓瞎呢?

因为…es2015模块化

才是所有 mvvm 最核心的 know how (此 mvvm 包含 react ,ng)

您不先讲这个,是无法把vuex精最精华的地方讲通。

es 2015模块化 好文

https://strongloop.com/strongblog/an-introduction-to-javascript-es6-modules/
https://segmentfault.com/a/1190000004100661

阮一峰 (es6 Module)

http://es6.ruanyifeng.com/#docs/module

4.Modules 模块化

counter 模块化 demo

https://bhnddowinf.github.io/bhnddowinf/vuejs2demo/counter_hot.html

5.应用结构

ToDo demo

https://bhnddowinf.github.io/bhnddowinf/vuejs2demo/todomvc.html

Shooping Cart demo

https://bhnddowinf.github.io/bhnddowinf/vuejs2demo/shopping_cart.html
610.插件

7.严格模式

8.State

9.Getters

10.Mutations

11.Actions

12.表单处理

13.测试

14.热重载

15.API

上一篇下一篇

猜你喜欢

热点阅读