vuex使用示例

Posted LLLLily

tags:

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

 

 

 

 

项目代码结构↓

 

src内容↓

 

store内容↓

 

 理解思路: component中的组件发送修改请求,由action.js处理请求,mutation修改请求,修改请求后state改变,从getter.js中可获取更新后的state中的数据。

state.js中为初始数据

const state={
  count:0
};

export default state;

 

action.js中的内容

import * as types from \'./types\';

const actions={
  increment:({
    commit,state
  },payload)=>{
    // alert(payload);
    payload=payload||1;
    commit(types.INCREMENT,payload);
  },
  decrement:({
    commit,state
  })=>{
    commit(types.DECREMENT);
  },
  async:({
    commit,state
  })=>{
    setTimeout(()=>{//请求数据
      commit(types.INCREMENT);
    },1000);
  },
  odd:({
    commit,state
  })=>{
    if(state.count % 2 == 0){
      commit(types.INCREMENT);
    }
  }
};

export default actions;

 

mutation.js的内容

import {
  INCREMENT,
  DECREMENT
} from \'./types\';


const mutations={
  [INCREMENT]:(state,payload)=>{
    // alert(payload);
    payload=payload||1;
    state.count+=payload;
  },
  [DECREMENT]:(state)=>{
    state.count--;
  }
};

export default mutations;

 

type.js的内容

export const INCREMENT=\'INCREMENT\'; //加  描述
export const DECREMENT=\'DECREMENT\'; //减  描述

 

getter.js的内容

const getters={
  count:(state)=>{
    return state.count;
  }
};

export default getters;

 

 

在App.vue(或其他组件)中获取、修改state中的状态↓

<template>
  <div id="app">
    <h1>vuex</h1>
    <input type="button" value="+" @click="increment(2)">
    <input type="button" value="-" @click="decrement">
    <input type="button" value="异步+" @click="async">
    <input type="button" value="偶数+" @click="odd">
    <br/>
    越过getters向state拿:{{$store.state.count}}
    <br/>
    {{count}}/{{count%2==0?\'双数\':\'单数\'}}
    <br/>
    <input type="button" value="修改私有数据" @click="check">
    <br/>
    {{n}}
  </div>
</template>

<script>
  import {mapActions,mapGetters} from \'vuex\';
export default {
  name: \'app\',
  data () {
    return {
      n:0
    }
  },
  methods:{ // 私有方法和 请求并存
    check(){
      this.n=\'bmw\';
    },
    ...mapActions(
      [\'increment\',\'decrement\',\'async\',\'odd\']
    )
  },
  computed:mapGetters(
    [\'count\']
  ),

  mounted(){
    //代码里面直接发请求 actions
//    this.$store.dispatch(\'increment\',121);

    //代码里面直接发请求 mutations
//    this.$store.commit(\'INCREMENT\',[\'apple\',\'banana\',\'orange\',\'西游记\']);

  }
}
</script>

<style>

</style>

  

 

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

VSCode自定义代码片段13——Vue的状态大管家

VSCode自定义代码片段13——Vue的状态大管家

需要示例代码片段帮助

vuex之mutations使用示例

vuex/store使用

处理屏幕旋转上的片段重复(带有示例代码)