Vuex
Vuex是在中大型项目中,用来管理一些变量的。因为如果项目比较大,一些数据在各个页面中可能需要进行交替使用,如果数据量比较大,通过params或者query的方式不太方便。这时候就可以使用Vuex来管理这些数据。

 


安装:
通过script安装:<script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js"></script>。
通过npm安装:npm install vuex --save。
如果是通过模块化打包的形式使用vuex,则在使用之前需要先通过Vue.use(Vuex)来安装:
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)

npm 变更vue仓库_数据

 

vuex默认依赖Promise,如果使用的浏览器并没有实现 Promise (比如 IE),那么可以使用es6-promise。
可以通过 CDN 将其引入:
<script src="https://cdn.jsdelivr.net/npm/es6-promise@4/dist/es6-promise.auto.js"></script>
或者通过npm install es6-promise --save。
如果是用模块化打包的形式使用,那么还需要导入一下:
import 'es6-promise/auto'

npm 变更vue仓库_数据_02

 

基本使用:
每一个Vuex应用的核心就是store(仓库)。store可以理解为就是一个容器,它包含着你的应用中大部分的状态(state)(就是变量)。Vuex和单纯的全局对象有以下两点不同:

1.Vuex的状态存储是响应式的。当Vue组件从store中读取状态的时候,若store中的状态发生变化,那么相应的组件也会相应地得到高效更新。
2.不能直接改变store中的状态。改变store中的状态的唯一途径就是显式地提交 (commit) mutation。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。

npm 变更vue仓库_Vue_03

import Vue from "vue"
import Vuex from "vuex"

Vue.use(Vuex);

const store = new Vuex.Store({
    state: {
        count: 0
    }
})

export default store

npm 变更vue仓库_数据_04

import Vue from 'vue'
import App from './App.vue'
import store from "./store";

Vue.config.productionTip = false;

new Vue({
    render: h => h(App),
    store  // 使用store
}).$mount('#app');

 

使用

npm 变更vue仓库_数据_05

<template>
  <div id="app">
    <h1>{{$store.state.count}}</h1>
  </div>
</template>

<script>

export default {
  name: 'App',
  mounted() {
    console.log('store: ', this.$store.state.count);
  },
  components: {}
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

npm 变更vue仓库_数据_06

 

修改

方式一直接修改(不推荐):

npm 变更vue仓库_Vue_07

<template>
  <div id="app">
    <h1>{{$store.state.count}}</h1>
    <button @click="$store.state.count++">增加</button>
    <button @click="$store.state.count--">减少</button>
  </div>
</template>

npm 变更vue仓库_App_08

 

方式二:封装函数

在mutations中封装函数,使用commit("函数名")调用

npm 变更vue仓库_App_09

npm 变更vue仓库_Vue_10

npm 变更vue仓库_App_11

getter:
有时候我们需要从store中的state中派生出一些状态,例如对列表进行过滤并计数:

npm 变更vue仓库_App_12

npm 变更vue仓库_数据_13

npm 变更vue仓库_Vue_14

## 安装:
1. npm install vuex --save
2. 如果你的网站想要支持那些不支持Promise的浏览器:npm install es6-promise --save

## 使用:
1. Vue.use(Vuex)
2. 创建Store对象:
  const store = new Vuex.Store({
    state: {
      count: 10
    },
    mutations: {
      increment(state){
        state.count++
      },
      substract(state){
        state.count--
      }
    },
    getters: {
      currentCount(state){
        return "当前的count为:"+state.count
      }
    }
  })
3. 在main.js中,需要把store放到`Vue`对象中,这样以后在其他的组件中才能通过`this.$store`的方式方便的访问到。

## 数据的操作:
1. 如果是直接获取,那么可以通过`this.$store.state.xxx`来访问。
2. 如果想要修改,那么建议通过`mutation`的形式来操作。可以在`Store`中定义一些`mutations`。
3. 以后调用的时候,需要用`$store.commit("mutation 名称")`来调用。
4. getters:非常类似于组件中的计算属性,可以进行一些操作再把值给返回回去。在组件中调用是通过`$store.getters.xxx`来调用。