真正掌握vuex的使用方法(六)
下面咱们来将切换的案例改为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的使用方法(六)相关推荐
- Vue2.x中vuex的使用方法及应用时的项目文件结构设计以完整demo实例解释
基本概念: Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 目录结构: Vuex 并不限制 ...
- 一位面试者提到直接调用vuex中mutations方法
简述是用this.$store.mutations.xxx(xx)方式调用,因从未见过此种调用方式,回来就搜索了一下,查询结果如下 首先前文: 获取 state 的方式有两种,分别是 this.$st ...
- Vuex的使用(六)——mutations的定义和用法
参考文档:https://vuex.vuejs.org/zh/guide/ state是在整个前端应用中需要共享和维护的状态,而在之前的几章里主要介绍了state及其衍生概念的共享和使用,下面重点介绍 ...
- vue3 中 vuex 两种方法使用 使用用用用用用用用
今天 来写一下 这个vue3中vuex的用法 1.安装 npm install vuex -S 2.引入 这个时候就有两种选择了 第一种 直接引入store文件 import $store from ...
- python使用方法-六、python 方法的使用
python 与其他语言一样,支持变量自带的一些方法. 如 name = "zhangsan" 此时的name 就像当与一个 值为 字符串的 object , python 是对字 ...
- 真正掌握vuex的使用方法(一)
导语:vuex是什么?我的理解就是vuex是一个管理者,管理的方式是集中式管理,管理的对象即是vue.js应用程序中的众多组件的共享部分.学习的过程当中,希望按照我的步骤一步一步来进行练习! 咱们知道 ...
- python_魔法方法(六):迭代器和生成器
迭代器 自始至终,都有一个概念一直在用,但是我们却没来都没有人在的深入剖析它.这个概念就是迭代. 迭代的意思有点类似循环,每一次的重复的过程被称为迭代的过程,而每一次迭代得到的结果会被用来作为下一次迭 ...
- 通俗易懂的MonteCarlo积分方法(六)
足球门的危险区域威胁度衡量问题 一.问题的提出 二.问题分析 三.模型的建立 四.模型的求解 这次我们主要以足球门的危险区域威胁度衡量问题(无防守球员)来作为MonteCarlo积分的一个实际应用 一 ...
- Unity之Shader Pass 通道显示贴图的几种方法- 六
Pass 通道显示贴图的几种方法 下面是几种显示模型贴图的方法,在此使用的是固定管线方法 方法一 Shader "Custom/PassOne" {Properties {//定义 ...
最新文章
- html5客户端本地存储之sessionStorage及storage事件
- scp构造端口_指定端口号的scp
- 定时任务 Scheduled quartz
- es Failed: 1: this action would add [2] total shards, but this cluster currently has [1001]/[1000]
- HashMap中的hash算法的几个思考
- 一流设计导航|16map|效率导航最全设计类软件!速度收藏!!
- andriod stdio 如何通过按钮保存textview的内容到txt文件中_信不信由你|手把手教你制作视频中的逐行显示字幕,超实用啊!...
- linux安装neo4j
- com.alibaba.fastjson.JSONObject;的使用
- 手机进程多了,有的进程就无法联网?
- ffmpeg解码H264文件并实时播放
- 基于深度学习的身份证号码识别方法
- 手机卸载不了刷机精灵
- 关于 NVIDIA 游戏内覆盖变成英文如何让其恢复中文
- 免费HTTP代理商如何
- matlab 反走样,如何在python中使用Matlab的imresize
- Redis生产环境你还敢用keys?我劝你放下屠刀,回头是岸!
- win10快速输入当前日期与时间
- 计算机数字音频工作站 pdf,ch07 数字音频工作站、调音台.pdf
- 卡丹尔算法(max subarray problem)
热门文章
- 建立表/索引时的 存储参数:【PCTUSED参数与PCTFREE参数】
- RUBY ON RAILS 插件收录: CACHE:Sweeper Generator
- android hardware architecture
- The Web Audio autoplay policy will be re-enabled in 音频无法播放
- cmd连接mysql连接:mysql-h主机地址-u用户名-p用户密码(注:u与root可以不用加)
- OpenCV中cvAdds和cvAdd中的mask的用法探讨
- JVM—加载到方法区的Class文件长什么样?
- Spring MVC 入门笔记
- Fluent Ribbon 第三步 应用程序菜单
- Python开发【第一篇】:目录