本文介绍了写给新手同学的vuex快速上手指北小结,分享给大家,具体如下
引入
//store.js import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const store = new Vuex.Store({ state: {...}, mutations: {...}, actions: {...} }) export default store //main.js ... import store from './store' Vue.prototype.$store = store const app = new Vue({ store,... }) ... //test.vue 使用时: import {mapState,mapMutations} from 'vuex'
State篇
state更新实时渲染是基于==computed==这个计算属性的,直接赋给data只能赋值初始值,不会随着state改变实时渲染
<!--state改变不会实时渲染--> export default { data() { return { name:this.$store.state.name, }; }, }
<!--监听state改变重新渲染视图--> <template> <div> {{name}} </div> <template> export default { computed: { name() { return this.$store.state.name; } }, }
注意: data中的变量如果和computed中的变量重名,data优先,注意命名
获取多个state值,写多个函数return,很繁琐,所以有==mapState==辅助函数
<!--取多个很冗余,繁琐--> export default { computed: { token(){ return this.$store.state.token; }, name(){ return this.$store.state.name; } }, }
<!--mapState 直接取出--> import { mapState } from 'vuex' export default { computed: mapState([ 'token', 'name' ]) }
我们有局部计算,怎么和mapState一起用?
import { mapState } from 'vuex' export default { computed:{ getTime(){ return 123; }, ...mapState([ 'token', 'name' ]) } }
我们为它起个别名
<template> <div> xiaokeai,dahuilang是我们取的别名 token,name是state的值 {{xiaokeai}} </div> <template> <script> import { mapState } from 'vuex' export default { computed:{ ...mapState({ xiaokeai:"token", dahuilang:"name", }) } } </script>
我们要state和data发生点什么
<template> <div> 假如token的值123; balabala的值就是 123皮卡皮 {{balabala}} </div> <template> <script> import { mapState } from 'vuex' export default { data(){ return { pikaqiu:"皮卡皮卡" } } computed:{ ...mapState({ xiaokeai:"token", dahuilang:"name", // 为了能够使用 `this` 获取局部状态,使用一个自定义名字的函数 balabala(state){ return state.token + this.pikaqiu; } }) } } </script>
取个对象值怎么破?
<template> <div> {{daSon}} {{xiaoSon}} </div> </template> <script> import { mapState } from 'vuex' export default { data(){ return { pikaqiu:"皮卡皮卡" } } computed:{ ...mapState({ daSon: state=>state.obj.yeye.baba.daSon, xiaoSon:state=>state.obj.yeye.baba.xiaoSon, }) } } </script>
这种方式取对象写到业务里不直观,也不共用,下节==Getter==有更优的方案
Getter篇
Getter是针对state的【对象】值提前做一些处理,以便用的时候直接提取
可以 this.$store.getters.xxx 使用,也可以使用mapGetters辅助函数,==辅助函数注意:== 和state一样,注入在computed中
import Vue from 'vue'; import Vuex from 'vuex'; Vue.use(Vuex); const store = new Vuex.Store({ state: { obj: { yeye: { baba: { daSon: "老大", xiaoSon: "老二" } } } }, getters: { <!--将想要提取或者处理的值这里处理好--> getson: state => { return state.obj.yeye.baba; } } }) export default store <!--用的时候,和state一样,也可以别名等等操作--> <template> <div> {{getson}} </div> </template> <script> import { mapGetters } from 'vuex' export default { computed: { ...mapGetters([ getson ]) } } </script>
Mutation篇
操作: this.$store.commit("名字","值");
import Vue from 'vue'; import Vuex from 'vuex'; Vue.use(Vuex); const store = new Vuex.Store({ state: { token: "vuex的token", }, mutations: { setToken(state, val) { state.token = val; } } }) export default store
mapMutations 辅助函数,和state一样,可以别名, ==注意:== 辅助函数注入在methods中
methods: { ...mapMutations([ 'setToken' ]) } <!--使用--> this.setToken(100); //token修改为100
Mutation 必须是同步函数,不要误解这句话,以为异步不能用,异步可以用在里面,视图的渲染,取值都没有问题,问题在于:调试的时候,一些浏览器调试插件不能正确监听state。所以方便调试,尽量将异步写入action中
Action篇
注意action的 参数不是 state ,而是context,context里面包含commit,state。基本操作:this.$store.dispatch("函数名","值")
const store = new Vuex.Store({ state: { count: 0 }, mutations: { increment (state) { state.count++ } }, actions: { increment (context) { context.commit('increment') } } }) <!--辅助函数操作 注入在methods中--> import { mapActions } from 'vuex' export default { methods: { ...mapActions([ "increment" ]) } } <!--使用--> this.increment(123);
module篇
module 目的将store按功能拆分成多个文件,利于维护管理,module 分为2种情况,1.是有命名空间, 2.是没有命名空间
没有命名空间: action、mutation 和 getter 是注册在全局的,所以要注意,方法函数不要设置同名了,如果同名了会都执行。
stete例外是局部。
import Vue from 'vue'; import Vuex from 'vuex'; import moduleA from "./modules/cat.js"; Vue.use(Vuex); const store = new Vuex.Store({ state: { token: "vuex的token", }, modules:{ moduleA } }) export default store; <!--moduleA.js--> export default { // namespaced: true, state: { cat:"我是cat", }, mutations: { setCat(state, val) { state.cat = val; } }, actions: { }, getters: { } };
无命名空间 取值
this.$store.state.moduleA.cat 或者 ...mapState({ cat:state=>state.moduleA.cat, }), 不可以(state是局部,不可以这么取): ...mapState([ "cat" ]),
无命名空间 改变值
和原来一样,因为方法是注册在全局的 this.$store.commit("setCat",666); 或者 ...mapMutations([ "setCat" ])
有命名空间: state, action、mutation 和 getter 是局部的,模块间命名互相不冲突,可以重名。
namespaced 设置为true,即可开启
<!--moduleA.js 文件--> export default { namespaced: true, state: { cat:"我是cat", } }
有命名空间取值
this.$store.state.moduleA.cat 或者 <!--注意这里:命名空间的名字带上,在modules注册时候呢个key值--> <!--也可以别名,方法和之前一样,就是第一个参数是空间名--> ...mapState("moduleA",[ "cat" ])
有命名空间 改变值
<!--只是第一个参数是空间名,其他操作一样--> ...mapMutations("moduleA",[ "setCat" ]) this.setCat(888); 或者: this.$store.commit("moduleA/setCat",666);
最后 plugins
vuex页面刷新会丢失数据,用vuex-persistedstate插件可解决
import createPersistedState from "vuex-persistedstate"; const store = new Vuex.Store({ state: {}, mutations: {}, actions: {}, getters: {}, modules:{}, plugins: [ createPersistedState({ storage: window.sessionStorage }) ] }) export default store
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]