1天让你精通vue(11 VueX)

2023-06-30 0 464

#头条新闻首

(1) 基本概念

在Vue中同时实现封闭式状况(统计数据)管理工作的两个Vue应用领域程序,对vue应用领域中数个模块的共享资源状况展开封闭式的管理工作(读/写),也是一类模块协同工作的形式,且适用于于任一模块协同工作。

(2) 何时能采用?

数个模块须要共享资源统计数据时

(3) 构筑vuex自然环境

① 建立文档:src/store/index.js

//导入Vue核心理念库 import Vue from vue //导入Vuex import Vuex from vuex //应用领域Vuex应用领域程序 Vue.use(Vuex) //预备actions第一类——积极响应模块中采用者的姿势 const actions = {} //预备mutations第一类——修正state中的统计数据 constmutations = {}//预备state第一类——留存具体内容的统计数据 const state = {} //建立并曝露store export default newVuex.Store({ actions, mutations, state })

② 在main.js中建立vm时传至store实用性项

…… //导入store import store from ./store……//建立vm new Vue({ el:#app, render: h => h(App), store })

(4) 基本采用

1. 初始化统计数据、实用性“`actions“`、实用性“`mutations“`,操作文档“`store.js“`

//导入Vue核心理念库 import Vue from vue //导入Vuex import Vuex from vuex //引用VuexVue.use(Vuex)const actions = { //积极响应模块中加的姿势 jia(context,value){ // console.log(actions中的jia被调用了,miniStore,value)context.commit(JIA,value) }, } const mutations = { //执行加 JIA(state,value){ // console.log(mutations中的JIA被调用了,state,value) state.sum += value } } //初始化统计数据 const state = { sum:0 } //建立并曝露store export default new Vuex.Store({ actions, mutations, state, }) “`

2. 模块中读取vuex中的统计数据:$store.state.sum

3. 模块中修正vuex中的统计数据:$store.dispatch(action中的方法名,统计数据) 或 $store.commit(mutations中的方法名,统计数据)

备注:若没有网络请求或其他业务逻辑,模块中也可以越过actions,即不写dispatch,直接编写commit

methods:{ increment(){ this.$store.commit(JIA,this.n) }, decrement(){this.$store.commit(JIAN,this.n) }, incrementOdd(){ this.$store.dispatch(jiaOdd,this.n) }, incrementWait(){ this.$store.dispatch(jiaWait,this.n) } }

(5) getters的采用

① 基本概念:当state中的统计数据须要经过加工后再采用时,可以采用getters加工。

② 在store.js中追加getters实用性

constgetters = { bigSum(state){return state.sum*10 } } //建立并曝露store export default newVuex.Store({ actions, mutations, state, getters })

③ 模块中读取统计数据:$store.getters.bigSum

(6) 四个map方法的采用

1. mapState方法:用于帮助我们映射state中的统计数据为计算属性

computed: { //借助mapState生成计算属性:sum、school、subject(第一类写法) …mapState({sum:sum,school:school,subject:subject}), //借助mapState生成计算属性:sum、school、subject(数组写法) …mapState([sum,school,subject]), },

2. mapGetters方法:用于帮助我们映射getters中的统计数据为计算属性

computed: { //借助mapGetters生成计算属性:bigSum(第一类写法) …mapGetters({bigSum:bigSum}), //借助mapGetters生成计算属性:bigSum(数组写法) …mapGetters([bigSum]) },

3. mapActions方法:用于帮助我们生成与actions对话的方法,即:包含$store.dispatch(xxx)的函数

methods:{ //靠mapActions生成:incrementOdd、incrementWait(第一类形式)…mapActions({incrementOdd:jiaOdd,incrementWait:jiaWait}) //靠mapActions生成:incrementOdd、incrementWait(数组形式) …mapActions([jiaOdd,jiaWait]) } <button @click=“jiaOdd(n)”>当前求和为奇数再加</button> <button@click=“jiaWait(n)”>等一等再加</button>

4. mapMutations方法:用于帮助我们生成与mutations对话的方法,即:包含$store.commit(xxx)的函数

methods:{ //靠mapActions生成:increment、decrement(第一类形式) …mapMutations({increment:JIA,decrement:JIAN}), //靠mapMutations生成:JIA、JIAN(第一类形式) …mapMutations([JIA,JIAN]), } <button @click=“JIA(n)”>+</button> <button @click=“JIAN(n)”></button>

备注:mapActions与mapMutations采用时,若须要传递参数须要:在模板中绑定事件时传递好参数,否则参数是事件第一类

(7) 模块化+命名空间

(1) 目的:让代码更好维护,让多种统计数据分类更加明确。

(2) 修正store.js

const countAbout = { namespaced:true,//开启命名空间 state:{x:1}, mutations: { … }, actions: { … }, getters: { bigSum(state){ return state.sum * 10 } } } const personAbout = { namespaced:true,//开启命名空间 state:{ … }, mutations: { … }, actions: { … } } const store = new Vuex.Store({ modules: { countAbout, personAbout } })

最好用导入的形式:建立两个js文档

import Vue from vue import Vuex from vuex Vue.use(Vuex) import count from @/store/count import person from @/store/person export default newVuex.Store({ modules:{ countAbout:count, person } })

(3) 开启命名空间后,模块中读取state统计数据:

//形式一:自己直接读取 this.$store.state.personAbout.list //形式二:借助mapState读取: …mapState(countAbout,[sum,school,subject]),

(4) 开启命名空间后,模块中读取getters统计数据:

//形式一:自己直接读取 this.$store.getters[personAbout/firstPersonName] //形式二:借助mapGetters读取: …mapGetters(countAbout,[bigSum])

(5) 开启命名空间后,模块中调用dispatch

//形式一:自己直接dispatch this.$store.dispatch(personAbout/addPersonWang,person) //形式二:借助mapActions: …mapActions(countAbout,{incrementOdd:jiaOdd,incrementWait:jiaWait})

(6) 开启命名空间后,模块中调用commit

//形式一:自己直接commit this.$store.commit(personAbout/ADD_PERSON,person) //形式二:借助mapMutations: …mapMutations(countAbout,{increment:JIA,decrement:JIAN}),

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务