Vuex是vue全家桶中最适合大型应用的代码库,可以保存网页应用的历史状态,提供网页回溯功能,管理各个组件的状态和关系。

但对于小型应用来说过于繁重,一个bus-中央总线就可以满足您的需求。

前言

vuex是vue全家桶中最难的一个,而且会感觉比较,在学习之前,建议您先学习:
vue
vue-router
node

简介

在做例子之前,我们需要来了解一下Vuex的思想,避免盲人摸象,如果觉得枯燥的话也可以先看后面的案例,可能会更容易理解。

单向数据流

Vuex内容比较复杂,大家不妨类比组件来看一看,左边是官网单向数据流表,右边是vue组件系统:
图片描述

    Action : 类似于methods方法,用来改变State中的数据(等会会提到mutations)
    State : 类似于组件中data,用来保存数据(可以提供快照,回溯功能)
    View : 这个是Vuex外的内容,通过action来实现功能,也从state中获取数据

这就是所谓的单向数据流

Vuex的运行机制

Vuex运行机制如下图,在下剪去了一些复杂的内容
图片描述
简单解释一下图中几个英文单词的意思:
四个元件:
Vue Components :组件,大家应该已经写过很多了
Actions :方法(异步),负责调用mutation里面的方法
Mutations : 方法(里面只能放同步),里面定义了各种方法,用来修改State的内容
State : 说白了就是一个对象,里面用对象储存内容,和data相似
四个动作:
Dispatch:派遣,类似于子组件的$emit
Commit : 触发,使用Vuex实例的commit方法,触发Mutation里面的方法
Mutate : 变更,使用Mutations里面的方法来改变State内容
Render : 实际上属于components组件调用State里面的内容来进行页面渲染

想必大家看完这些已经有点晕了吧,晕就对了,接下来我们来做点简单的实例。

示例

思维导图

做之前,我们先看下示例是如何运行的吧:
图片描述
vm组件绑定了一个计算属性,从state里面拿值
vm组件侦测到点击事件,告诉store实例:让Action帮我改数据
Action收到领导的命令,告诉下属程序员mutations:给我改数据
Mutations就很听话的改变了State的数据
State作为总受当然很服帖的改变了数据
当然,State里面的数据逃不过vm的眼睛,vm计算属性检测到了数据变化,从而改变了值

示例的初始化

我们新建一个文件夹,新建一个html文件,引入基本的代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <script src="https://cdn.jsdelivr.net/npm/vue"></script>
  <script src="https://unpkg.com/vuex"></script>
</head>
<body>
  <div id="app">

  </div>
  <script>
    const store = new Vuex.Store({
      state : {

      },
      actions : {

      },
      mutations : {

      }
    })

    let vm = new Vue({
      el : "#app",
      data : {

      },
      computed : {
      
      },
      methods : {

      }
    })
  </script>
</body>
</html>

以上初始化了我们的项目,其中初始化了
store实例,包括三巨头:state,actions,mutations
vm实例,vue的一个组件而已

好,接下来我们来做一个点击增加数字的网页

html数据渲染

图片描述
修改如图红框中间的数据,这里我们绑定了

count : 计算属性
counter : 函数,绑定在methods中

好的,接下来修改vm中内容:
图片描述
解释下参数:

count : 计算属性,返回store里面的值
counter : 函数,使用store的dispatch方法,触发incrementAction 的Action方法

store中数据绑定

图片描述
解释下几个参数:

count : 数字的计数,和data中数据很像
incrementAction : 触发mutations中的increment方法
increment : 增加数字的值,和methods中函数很像

好的,接下来刷新网页,点击按钮,是不是数字增加了呢了呢?这就是最简单的一个实例。

getter实例--更新中

在vue-cli中使用--更新中


比那名居天子
499 声望28 粉丝