下面咱们来将切换的案例改为vuex来写! 
首先需要在src目录下,新建一个store文件夹,然后在该文件夹内创建一个store.js文件

import Vue from 'vue';//引用vue
import Vuex from 'vuex';//引用vuex
Vue.use(Vuex);//使用vuex
const state={tagList:[],//用于存放与切换相关的数据
};
const mutations={//用于改变state下的tagList状态值SET_TAGLIST(state,v){//这里的state即是上面定义的state常量state.tagList=v;}
}
export default new Vuex.Store({//暴露Store对象
    state,mutations,//将mutations进行暴露
})

main.js为:

import Vue from 'vue'
import App from './App'
import router from './router'
import store from './vuex/store'//导入store.js
Vue.config.productionTip = false
new Vue({el: '#app',router,store,//添加store
    components: { App },template: '<App/>'
})

app.vue为:

<template>
<div id="app"><!--对按钮进行遍历--><input type="button" v-for="(item,i) in tagList" :value="item.tagName" :class="{active:i==index}" @click="index=i"><!--对新闻进行遍历--><div v-for="(item,i) in tagList" v-show="i==index"><p v-for="info in item.newList"><a :href="info.newHref">{{info.newTitle}}</a></p></div>
</div>
</template>
<script>import axios from "axios";import {mapState} from "vuex";export default {name: 'App',data(){return {//index用于记录当前所选按钮的位置,值会根据点击按钮的不同而变化
                index:0}},computed:{...mapState(["tagList"])},mounted(){axios.get("/static/tagList.json").then(data=>{this.$store.commit("SET_TAGLIST",data.data);})}}
</script>
<style>#app input,#app p{margin:5px;padding:5px;}#app input.active{background:red;}#app div{border:1px solid red;}
</style>

npm run dev,运行一次,一切正常! 
到目前为止,相信大家看以上的代码应该都不会有太大问题了,所以不做解释! 
咱们知道,对多个 state 的操作 , 使用 mutations 来操作比较好维护 , 但mutations 只可以写一些同步操作,那异步操作放到哪里呢?比如咱们的axios放在哪里比较合适呢?在这个时候咱们就可以用到action了。通过action来操作mutations最终来改变state的值。 
接下来在store.js中添加actions:

import Vue from 'vue';//引用vue
import Vuex from 'vuex';//引用vuex
import axios from "axios"
Vue.use(Vuex);//使用vuex
const state={tagList:[]
};
const mutations={//用于改变state下的tagList状态值SET_TAGLIST(state,v){//这里的state即是上面定义的state常量state.tagList=v;}
}
const actions={getTagList:function(context){//这里的context和我们使用的$store拥有相同的对象和方法axios.get("/static/tagList.json").then(data=>{context.commit("SET_TAGLIST",data.data);//根据需要,咱们还可以在此处触发其它的mutations方法
            })}
}
export default new Vuex.Store({//暴露Store对象
    state,mutations,//将mutations进行暴露actions//将actions进行暴露
})

那么接下来就要在App.vue中来触发action下的方法getTagList:

import {mapState} from "vuex";
export default {name: 'App',data(){return {//index用于记录当前所选按钮的位置,值会根据点击按钮的不同而变化index:0}},computed:{...mapState(["tagList"])},mounted(){//使用 $store.dispatch('getTagList') 来触发 action 中的 getTagList 方法。this.$store.dispatch("getTagList");}
}

使用 $store.dispatch(‘getTagList’) 来触发 action 中的 getTagList 方法。也推荐大家在action里来写一些异步方法! 
当然调用action的方法也有简写的形式:

//引入mapActions
import {mapState,mapActions} from "vuex";
export default {name: 'App',data(){return {//index用于记录当前所选按钮的位置,值会根据点击按钮的不同而变化index:0}},methods:{//通过mapActions添加上action当中需要的方法getTagList...mapActions(["getTagList"])},computed:{...mapState(["tagList"])},mounted(){//直接调用 即可this.getTagList();}
}

npm run dev 运行,依旧完美! 
未完,待续!

转载于:https://www.cnblogs.com/catbrother/p/9397411.html

真正掌握vuex的使用方法(六)相关推荐

  1. Vue2.x中vuex的使用方法及应用时的项目文件结构设计以完整demo实例解释

    基本概念: Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 目录结构: Vuex 并不限制 ...

  2. 一位面试者提到直接调用vuex中mutations方法

    简述是用this.$store.mutations.xxx(xx)方式调用,因从未见过此种调用方式,回来就搜索了一下,查询结果如下 首先前文: 获取 state 的方式有两种,分别是 this.$st ...

  3. Vuex的使用(六)——mutations的定义和用法

    参考文档:https://vuex.vuejs.org/zh/guide/ state是在整个前端应用中需要共享和维护的状态,而在之前的几章里主要介绍了state及其衍生概念的共享和使用,下面重点介绍 ...

  4. vue3 中 vuex 两种方法使用 使用用用用用用用用

    今天 来写一下 这个vue3中vuex的用法 1.安装 npm install vuex -S 2.引入 这个时候就有两种选择了 第一种 直接引入store文件 import $store from ...

  5. python使用方法-六、python 方法的使用

    python 与其他语言一样,支持变量自带的一些方法. 如 name = "zhangsan" 此时的name 就像当与一个 值为 字符串的 object , python 是对字 ...

  6. 真正掌握vuex的使用方法(一)

    导语:vuex是什么?我的理解就是vuex是一个管理者,管理的方式是集中式管理,管理的对象即是vue.js应用程序中的众多组件的共享部分.学习的过程当中,希望按照我的步骤一步一步来进行练习! 咱们知道 ...

  7. python_魔法方法(六):迭代器和生成器

    迭代器 自始至终,都有一个概念一直在用,但是我们却没来都没有人在的深入剖析它.这个概念就是迭代. 迭代的意思有点类似循环,每一次的重复的过程被称为迭代的过程,而每一次迭代得到的结果会被用来作为下一次迭 ...

  8. 通俗易懂的MonteCarlo积分方法(六)

    足球门的危险区域威胁度衡量问题 一.问题的提出 二.问题分析 三.模型的建立 四.模型的求解 这次我们主要以足球门的危险区域威胁度衡量问题(无防守球员)来作为MonteCarlo积分的一个实际应用 一 ...

  9. Unity之Shader Pass 通道显示贴图的几种方法- 六

    Pass 通道显示贴图的几种方法 下面是几种显示模型贴图的方法,在此使用的是固定管线方法 方法一 Shader "Custom/PassOne" {Properties {//定义 ...

最新文章

  1. html5客户端本地存储之sessionStorage及storage事件
  2. scp构造端口_指定端口号的scp
  3. 定时任务 Scheduled quartz
  4. es Failed: 1: this action would add [2] total shards, but this cluster currently has [1001]/[1000]
  5. HashMap中的hash算法的几个思考
  6. 一流设计导航|16map|效率导航最全设计类软件!速度收藏!!
  7. andriod stdio 如何通过按钮保存textview的内容到txt文件中_信不信由你|手把手教你制作视频中的逐行显示字幕,超实用啊!...
  8. linux安装neo4j
  9. com.alibaba.fastjson.JSONObject;的使用
  10. 手机进程多了,有的进程就无法联网?
  11. ffmpeg解码H264文件并实时播放
  12. 基于深度学习的身份证号码识别方法
  13. 手机卸载不了刷机精灵
  14. 关于 NVIDIA 游戏内覆盖变成英文如何让其恢复中文
  15. 免费HTTP代理商如何
  16. matlab 反走样,如何在python中使用Matlab的imresize
  17. Redis生产环境你还敢用keys?我劝你放下屠刀,回头是岸!
  18. win10快速输入当前日期与时间
  19. 计算机数字音频工作站 pdf,ch07 数字音频工作站、调音台.pdf
  20. 卡丹尔算法(max subarray problem)

热门文章

  1. 建立表/索引时的 存储参数:【PCTUSED参数与PCTFREE参数】
  2. RUBY ON RAILS 插件收录: CACHE:Sweeper Generator
  3. android hardware architecture
  4. The Web Audio autoplay policy will be re-enabled in 音频无法播放
  5. cmd连接mysql连接:mysql-h主机地址-u用户名-p用户密码(注:u与root可以不用加)
  6. OpenCV中cvAdds和cvAdd中的mask的用法探讨
  7. JVM—加载到方法区的Class文件长什么样?
  8. Spring MVC 入门笔记
  9. Fluent Ribbon 第三步 应用程序菜单
  10. Python开发【第一篇】:目录