关于Vuex的基本使用
1.vuex简介
Vuex是专门为Vue框架提供的。用来管理状态的模块。集中式管理状态数据。它管理的数据可以追踪变化。它是在多个组件之间共享数据的方案。
在store/index.js 定义仓库对象,需要对仓库对象进行配置
state:需要共享的数据
mutations:定义修改state的同步的方法
getters:定义对状态的过滤的操作,类似于组件的计算结果
actions:定义异步获取数据并且赋值给state
modules:状态模块化
2.vuex的定义
state:状态,需要共享的数据 不能直接修改,要么通过actions异步进行,要么通过mutations进行同步修改.
export default new Vuex.Store({state: {a:10,txt:"hello",arr:["yesterday once more","my heart will go on"],name:{firstName:"张",lastName:"三"},homeData:[]},
})
mutations:同步修改state的字段,里面都是一些函数,修改state字段里面的状态。
mutations: {// 参数1state对象,参数2调用的时候传递的实参setNum(state,v){state.a = v},// 修改txt状态的函数setTxt(state,v){state.txt = v},setHomeData(state,v){state.homeData = v}},
getters:类似于组件的计算结果,有返回值,过滤
getters:{fullName(state){return state.name.firstName + state.name.lastName}},
actions: 异步获取数据并且通过同步修改的方法进行修改
actions: {// 参数1:仓库对象,参数2:可以传递一些参数queryData(store,v){return new Promise((resolve,reject)=>{axios.get("/api/test",{params:{page:1,pageSize:3}}).then(res=>{// 提交mutations方法,调用mutations中同步的方法store.commit("setHomeData",res.data.data)resolve()}).catch(err=>{reject(err)})})}},
3.vuex的使用
state:
1.$store.state.字段
<p>{{ $store.state.a }}</p>//store全局唯一的对象
2.先通过maoState进行映射到computed里面然后去使用
// 导入vuex的映射函数
import {mapState} from "vuex"
export default {computed:{
// 映射状态的时候可以在组件的计算结果中进行映射,通过扩展运算符把仓库的一个状态以数组的形式写在mapstate的参数里面...mapState(["a","txt","arr"])}
}
mutations:
1.this.$store.commit("setNum",传递的数据)
export default {methods: {f1() {// 第三种方法 通过commit提交方法进行提交修改this.$store.commit("setNum", 1000000);this.$store.commit("setTxt", "撒谎比");},},
2.先通过mapMutations进行映射到methods里面然后再去使用
import {mapMutations} from "vuex";
export default {methods: {
// 把mutations里面的修改方法映射到methods,相当于在本组件的methods中添加一些函数,可以在本组件使用...mapMutations(["setNum", "setTxt"]),f1() {// 第一种修改状态的方法// this.setNum(100)// this.setTxt("你好")// 第二种修改 通过仓库对象访问状态直接进行修改,不建议去使用// this.$store.state.a = 1000000},},
actions
1.this.$store.dispatch("action的名字",传递的数据)
export default {created(){// 仓库里面的异步 action调用this.$store.dispatch("queryData","123").then(res=>{console.log("数据请求成功");})},methods:{...mapActions(["queryData"])}
}
2.先通过mapActions进行映射到methods里面然后再去使用
import {mapActions,mapGetters} from "vuex"
export default {created(){this.queryData()},methods:{...mapActions(["queryData"])}
}
getters:
1.this.$store.getters("getter的名字",传递的数据)
<p>{{$store.getters.getSkill}}访问根仓库的getters</p>
2.先通过mapGetters进行映射到computed里面然后再去使用
import { mapGetters } from "vuex";
export default {computed: {...mapGetters(["fullName"]),},
};
4.vuex子仓库的配置
// 导出的对象和仓库index.js的配置字段是一样的
export default{
// 模块化的仓库state是一个函数,像子组件中的一样state(){return{count:1,books:[],todos:[{id:1,text:"睡觉",done:false},{id:2,text:"吃饭",done:true},{id:3,text:"打豆豆",done:false},{id:4,text:"敲代码",done:true}]}},mutations:{setCount(state,v){state.count = v},setBooks(state,v){state.books = v}},getters:{// 过滤未完成的事件umcomplete:(state,getters,rootState)=>{// state:本模块的数据// getters:仓库中所有的getters,包括根仓库种getters,如果添加了命名空间getters就是本模块的getters// rootState 根仓库的状态return state.todos.filter(v=>{return !v.done})},// 过滤出已经完成的done:(state,getters,rootState)=>{return state.todos.filter(v=>{return v.done})}},
actions:{
async getData(store,v){
var result = await axios.get("/myApi/lurker/carguide/getwar
ningmsg?city=zz&type=2")
//把数据存入books,利用setBooks
store.commit("setBooks",result.data.data.content)}},modules:{},// 使用命名空间,以后本模块的数据需要通过指定命名空间进行访问// 在index.js的modules字段配置当中给模块进行空间的命名
namespaced:true
}
注意:模块仓库设置namespaced:true意为允许设置模块名,可以在根仓库种进行设置模块子仓库的名字,方便后面使用。在根仓库设置模块仓库的名代码如下:
先对子仓库进行导入,命名为moduleA
import moduleA from "./module.js"
//在根仓库的modules中设置名为a
modules: {a:moduleA}
5.使用子仓库
举例为根仓库下的a子仓库,在跟仓库命名为a
state
1 $store.dispatch("a/getData",100)
export default {created() {// 1直接使用.$store访问某块里面的action,dispatch函数的参数是"命名空间/action名字"this.$store.dispatch("a/getData",2)},
}
2先通过mapActions进行映射,...mapActions({b:"a/getData"}) this.b()
import {mapMutations} from "vuex"
export default {created() {this.b()},methods: {// mapActions()参数是一个对象 属性可以自定义属性,属性值模块中的action...mapActions({b:'a/getData'}), },
}
getters:
1 $store.getters['a/done']
访问模块里面getter的时候 通过 $store.getters['a/getters']方式进行访问<p>{{$store.getters['a/done']}} 访问模块a里面的getters</p>
2 先通过mapGetters进行映射,...mapGetters({b:"a/umcomplete",c:"a/done"})
import {mapGetters} from "vuex"
export default {computed:{...mapGetters({b:"a/umcomplete",c:"a/done"})}
}
6.持久化存储
// 创建持久化存储对象
var vueLocal = new Vueinstance({// 存储方式,默认的是localStorage存储,可以修改成window.sessionStorage// storage:window.localStoragestorage:window.sessionStorage
})
记得在组件中书写使用插件,使用持久化存储插件
// 使用插件,使用持久化存储插件plugins:[vueLocal.plugin]
关于Vuex的基本使用相关推荐
- 【实用】Angular中如何实现类似Vuex的全局变量状态变化功能?
什么是Vuex?只需三分钟!只需创建一个vuex.js文件,让你马上学会使用Vuex,尽管Vuex是个鸡肋!(扔掉store文件夹和里面的index.getters.actions.mutations ...
- 只需三分钟!只需创建一个vuex.js文件,让你马上学会使用Vuex,尽管Vuex是个鸡肋!(扔掉store文件夹和里面的index、getters、actions、mutations等js文件吧!)
前情提示:有一天,我要实现一个效果→点击某个按钮改变一个全局变量,并且要让绑定了该变量的所有位置异步渲染.我试过用一个全局的js文件存放该变量,该变量值虽然改变了,但是没有做到异步渲染.接着我用win ...
- vuex+vue-router拦截
干就完了 项目中经常遇到这样一个场景,用户信息或者进行增删改的一些模块,需要根据用户是否登录,进行路由拦截,直接上代码 在store文件夹下的store.js中存放一个默认登录状态 /** store ...
- mutations vuex 调用_Vuex源码学习(六)action和mutation如何被调用的(前置准备篇)...
前言 Vuex源码系列不知不觉已经到了第六篇.前置的五篇分别如下: 长篇连载:Vuex源码学习(一)功能梳理 长篇连载:Vuex源码学习(二)脉络梳理 作为一个Web前端,你知道Vuex的instal ...
- 在vue中使用vuex,修改state的值示例
1. 安装 vuex npm install vuex -S 2.在目录下创建store文件 3. 在store.js编辑一个修改state的方法 然后在mian.js中全局引入 最后在组件中使用 这 ...
- vue之mapMutaions的使用 vuex中 action 用法示例 api.js的使用
vue之mapMutations的使用 我们通过Mutation来改变store中的state,方法往往是在子组件中使用 this.$store.commit(); 来实现,但是这样的缺点是不容易查看 ...
- 基于Vue, Vuex 和 ElementUI 构建轻量单页Hexo主题Lite
Hexo Theme Lite Keep Calm, Lite and Writing. light single page blog application theme, using Vue, Vu ...
- 详解 Vue Vuex 实践
2019独角兽企业重金招聘Python工程师标准>>> 随着应用复杂度的增加,我们需要考虑如何进行应用的状态管理,将业务逻辑与界面交互相剥离,详细讨论参考笔者的2016-我的前端之路 ...
- vue总结 08状态管理vuex
状态管理 类 Flux 状态管理的官方实现 由于状态零散地分布在许多组件和组件之间的交互中,大型应用复杂度也经常逐渐增长.为了解决这个问题,Vue 提供 vuex:我们有受到 Elm 启发的状态管理库 ...
- 使用vue2.0 vue-router vuex 模拟ios7操作
其实你也可以,甚至做得更好... 首先看一下效果:用vue2.0实现SPA:模拟ios7操作 与 通讯录实现 github地址是:https://github.com/QRL909109/ios7 如 ...
最新文章
- mac os vmware 显卡驱动_【新机】华为Mate 40系列国行售价明天公布,饿了么可以买手机?| 干翻牙膏厂,AMD发布RX6000显卡...
- SEO优化如何让网站关键词排名稳如狗?
- Unity学习笔记3 简易2D横版RPG游戏制作(三)
- iOS开发 简述使用OCUnit对程序进行单元测试(UnitTest)
- 用python的五种方式_Python加载数据的5种不同方式(收藏)
- 平方根/立方根/根式
- 我比领导小15岁,互相有好感,为什么每次路过我办公室都叹气?
- 共享python代码模块
- java日期转换_java日期格式转换
- ubuntuQQ怎末安装
- 用人话说说希尔伯特空间??
- 怎么把Word转成PDF?转换方法很简单
- Comsumer的一些解释
- sqlitestudio和mysql_sqlitestudio怎么用 sqlitestudio使用方法图文详解
- 命令与征服3 凯恩之怒
- [codeforces 1379B] Dubious Cyrpto 公式推导
- 随机生成11位的电话号码
- Element Black 打造 NFT 新形式
- ubuntu 安装Qualcomm Atheros QCA9565 AR9565 无线网卡驱动并连接wifi网络
- 基于STM32的自动量程转换数字电压表设计--开发笔记
热门文章
- /proc/self/目录的意义
- ERNIE-Enhanced Language Representation with Informative Entities 阅读笔记
- 【VB数组小例】产生随机数并求和(附带添加图片用法)
- Java实现蓝桥杯二项式的系数规律
- ffmpeg v4l2集成分析
- 导入tkinter出错
- uni-app 退出app操作
- unbuntu16.4 64位安装spade+XMPP教程
- hdoj 4888 Redraw Beautiful Drawings 【最大流满流+唯一性判断】
- conventional-changelog 参数含义