vuex

Posted chen-yi-yi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vuex相关的知识,希望对你有一定的参考价值。

第一步:安装指令 npm install vuex --save

在package.json中可以看到版本 

技术图片技术图片

在项目的src目录下新建一个目录store,在该目录下新建一个index.js文件,我们用来创建vuex实例,然后在该文件中引入vue和vuex,创建Vuex.Store实例保存到变量store中,最后export default导出store:

import Vue from ‘vue‘ //引入vue
import Vuex from ‘vuex‘ //引入vuex

//使用vuex
Vue.use(Vuex);

//创建Vuex实例
const store = new Vuex.Store();

export default store; //导出store

技术图片!!!!!!!!注意图上有错误:new Vuex.Store S要大写否则报错

然后我们在main.js文件中引入该文件,在文件里面添加 import store from ‘./store’;,再在vue实例全局引入store对象;

import Vue from ‘vue‘
import App from ‘./App‘
import router from ‘./router‘

import store from ‘./store‘


Vue.config.productionTip = false
Vue.config.devtools = true // 这里改为 false


/* eslint-disable no-new */
new Vue(
  el: ‘#app‘,
  router,
  store,
  components: 
    App
  ,
  template: ‘<App/>‘
)

下面就开始 我们的胡写乱造了

state

state中储存变量,获取我们定义的数据 (类似data的作用)

获取方法:this.$store.变量名

写法1:

import Vue from ‘vue‘ //引入vue
import Vuex from ‘vuex‘ //引入vuex

//使用vuex
Vue.use(Vuex);

//创建Vuex实例
const store = new Vuex.Store(
  state: 
    name: ‘安稳‘,
    age: 18
  
);

export default store; //导出store

写法2:

import Vue from ‘vue‘ //引入vue
import Vuex from ‘vuex‘ //引入vuex

//使用vuex
Vue.use(Vuex);


// 注意必须写在Vuex实例上面 不然不会报错但是也不会出效果
const state = 
  name: ‘安稳‘,
  age: 18


//创建Vuex实例
const store = new Vuex.Store(
  state
);


export default store; //导出store

getters

vuex官方API提供了一个getters,类似vue的computed计算属性。
getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算。
这里我们可以通过定义vuex的Getter来获取,Getters 可以用于监听、state中的值的变化,返回计算后的结果。
 
获取方法:this.$store.getters.方法名
写法1:
import Vue from ‘vue‘ //引入vue
import Vuex from ‘vuex‘ //引入vuex

//使用vuex
Vue.use(Vuex);


// 注意必须写在Vuex实例上面 不然不会报错但是也不会出效果
const state = 
  name: ‘安稳‘,
  age: 18

const store = new Vuex.Store(
  state: 
    name: ‘安稳‘,
    age: 18
  ,
  getters: 
    isname(state)  //接收一个参数state, 这个参数就是我们用来保存数据的那个对象;
      return state.name
    ,
    isage(state) 
      return state.age + 1
    
  
);

export default store; //导出store
写法2:
import Vue from ‘vue‘ //引入vue
import Vuex from ‘vuex‘ //引入vuex

//使用vuex
Vue.use(Vuex);


// 注意必须写在Vuex实例上面 不然不会报错但是也不会出效果
const state = 
  name: ‘安稳‘,
  age: 18

// vuex官方API提供了一个getters
const getters = 
  isname(state)  //接收一个参数state, 这个参数就是我们用来保存数据的那个对象;
    return state.name
  ,
  isage(state) 
    return state.age
  


//创建Vuex实例
const store = new Vuex.Store(
  state,
  getters
);


export default store; //导出store

以下的例子都只写一种  定义好之后扔进Vuex.Store里面

mutations

mutations 也是一个对象 用来放修改state初始化的方法   使用 传入state 或额外的参数 利用vue的双向数据驱动进行值的改变
import Vue from ‘vue‘ //引入vue
import Vuex from ‘vuex‘ //引入vuex

//使用vuex
Vue.use(Vuex);


// 注意必须写在Vuex实例上面 不然不会报错但是也不会出效果
const state = 
  name: ‘安稳‘,
  age: 18

// vuex官方API提供了一个getters
const getters = 
  isname(state)  //接收一个参数state, 这个参数就是我们用来保存数据的那个对象;
    return state.name
  ,
  isage(state) 
    return state.age
  

//mutations 也是一个对象 用来放修改state初始化的方法
//使用 传入state 或额外的仓鼠 利用vue的双向数据驱动进行值的改变

const mutations = 
  addage(state) 
    state.age = state.age + 1
  ,
  jianage(state) 
    state.age = state.age - 1
  


//创建Vuex实例
const store = new Vuex.Store(
  state,
  getters,
  mutations
);


export default store; //导出store

组件中使用:

<template>
  <div class="vuex">
    <input type="text" v-model="$store.state.name" />
    <input type="text" v-model="$store.state.age" />
    <button @click="jianfun">-</button>
    <button @click="addfun">+</button>

    <p>this.$store.getters.isname</p>
    <p>this.$store.getters.isage</p>
  </div>
  <!-- 使用vuex来保存我们需要管理的状态值,值一旦被修改,所有引用该值的地方就会自动更新 -->
</template>

<script>
export default 
  name: "vuex",
  data() 
    return 
      msg: "123",
      comsg: ""
    ;
  ,
  methods: 
    addfun() 
      debugger;
      this.$store.commit("addage");
    ,
    jianfun() 
      this.$store.commit("jianage");
    
  
;
</script>

这不是理想的改变值的方式

Actions

vuex提供了actions,这个actions也是个对象变量,最大的作用就是里面的Action方法 可以包含任意异步操作,这里面的方法是用来异步触发mutations里面的方法,actions里面自定义的函数接收一个context参数和要变化的形参,context与store实例具有相同的方法和属性,所以它可以执行context.commit(‘ ‘)。

下面改写代码

使用组件中只变动这里:
methods: 
    addfun() 
      this.$store.dispatch("addfun");
    ,
    jianfun() 
      this.$store.dispatch("jianfun");
    
  

store中
import Vue from ‘vue‘ //引入vue
import Vuex from ‘vuex‘ //引入vuex

//使用vuex
Vue.use(Vuex);


// 注意必须写在Vuex实例上面 不然不会报错但是也不会出效果
const state = 
  name: ‘安稳‘,
  age: 18

// vuex官方API提供了一个getters
const getters = 
  isname(state)  //接收一个参数state, 这个参数就是我们用来保存数据的那个对象;
    return state.name
  ,
  isage(state) 
    return state.age
  

//mutations 也是一个对象 用来放修改state初始化的方法
//使用 传入state 或额外的参数 利用vue的双向数据驱动进行值的改变

const mutations = 
  addage(state) 
    state.age = state.age + 1
  ,
  jianage(state) 
    state.age = state.age - 1
  


const actions = 
  addfun(context)  //自定义触发mutations里函数的方法,context与store 实例具有相同方法和属性
    context.commit(‘addage‘);
  ,
  jianfun(context)  //同上注释
    context.commit(‘jianage‘);
  ,
;

//创建Vuex实例
const store = new Vuex.Store(
  state,
  getters,
  mutations,
  actions
);


export default store; //导出store

 

 
下面我们直接传入dispatch中的第二个参数,然后在actions中的对应函数中接受参数在传递给mutations中的函数进行计算:
组件中  
methods: 
    addfun() 
      this.$store.dispatch("addfun");
    ,
    jianfun() 
      var a = 8;
      this.$store.dispatch("jianfun", a);
    
  

vuex
技术图片

可以发现 我们在组件中使用vuex内的方法是都是通过this使用的 

this.$store.dispatch("方法名");  actions
this.$stroe.state.变量名;     state
this.$store.getters.变量名;    getters
this.$store.commit("方法名");  mutations

也可以mapState、mapGetters、mapActions

import  mapState, mapGetters, mapActions  from "vuex";    
mapActions写在方法里面
  computed: 
    ...mapState(
      count: state => state
    ),
    //  ...mapGetters(["isname", "isage"]) //这是直接引用 也可以换名字用

    ...mapGetters(
      cy1: "isname", // 映射 `this.cy1` 为 `store.getters.isname`
      cy2: "isage"
    )
  ,
  methods: 
    ...mapActions(
      add: "addfun",
      jian: "jianfun"
    )
    // ...mapActions([‘addfun‘,‘jianfun‘])    直接用
如果使用简写...mapActions需要传参 直接调用的时候传入即可
技术图片
<h1>count</h1>
<p>isname</p>
<p>isage</p>
<p>cy1</p>
<p>cy2</p>

入门到此结束了~ by~

以上是关于vuex的主要内容,如果未能解决你的问题,请参考以下文章

Vuex

Vuex基本介绍

Vuex状态管理机制

Vuex笔记

vuex 基本用法

备忘录应用