Vue基础21之Vuex第二节
创始人
2024-06-03 22:23:27
0

Vue基础21

  • Vuex
    • 多组件共享数据
      • Calculation.vue
      • Persons.vue
      • src/store/index.js
    • vuex模块化+namespace
      • 模块化
        • src/store/index.js
        • Calculation.vue
        • Persons.vue
        • App.vue
      • 发送Ajax请求处理并拆分store
        • 请求
        • src/store/personOptions.js
        • src/store/countOptions.js
        • main.js
        • src/store/index.js
        • Persons.vue
        • Calculation.vue
        • App.vue
    • 总结:模块化+命名空间

Vuex

多组件共享数据

在这里插入图片描述

Calculation.vue

Persons.vue

src/store/index.js

//该文件用于创建Vuex中最为核心的store
import Vue from 'vue'
//引入Vuex
import Vuex from 'vuex'
//应用vuex插件
Vue.use(Vuex)//准备actions——用于响应组件中的动作
const actions={addOdd(context,value){if(context.state.sum%2){console.log("actions中的addOdd被调用了")context.commit("Addmore",value)}},addWait(context,value){setTimeout(()=>{console.log("actions中的addWait被调用了")context.commit("Addmore",value)},500)}
}
//准备mutations——用于操作数组(state)
const mutations={Addmore(state,value){console.log("mutations中的Addmore被调用了")state.sum+=value},Deduce(state,value){console.log("mutations中的Deduce被调用了")state.sum-=value},AddPerson(state,value){state.personList.unshift(value)}
}
//准备state——用于存储数组
const state={sum:0,school:"幸福大学",subject:"计算机",personList:[{id:"001",name:"张三"}]
}//准备getters——用于将state中的数据进行加工
const getters={bigSum(state){return state.sum*10}
}//创建并暴露store
export default new Vuex.Store({actions,mutations,state,getters
})

请添加图片描述

vuex模块化+namespace

在这里插入图片描述

模块化

src/store/index.js

//该文件用于创建Vuex中最为核心的store
import Vue from 'vue'
//引入Vuex
import Vuex from 'vuex'
//应用vuex插件
Vue.use(Vuex)//求和相关的配置
const countOptions={namespaced:true,//准备actions——用于响应组件中的动作actions:{addOdd(context,value){if(context.state.sum%2){console.log("actions中的addOdd被调用了")context.commit("Addmore",value)}},addWait(context,value){setTimeout(()=>{console.log("actions中的addWait被调用了")context.commit("Addmore",value)},500)}},//准备mutations——用于操作数组(state)mutations:{Addmore(state,value){console.log("mutations中的Addmore被调用了")state.sum+=value},Deduce(state,value){console.log("mutations中的Deduce被调用了")state.sum-=value},},//准备state——用于存储数组state:{sum:0,school:"幸福大学",subject:"计算机",},//准备getters——用于将state中的数据进行加工getters:{bigSum(state){return state.sum*10}}
}//人员相关的配置
const personOptions={namespaced:true,actions:{addPersonWang(context,value){if(value.name.indexOf("王")==0){context.commit("AddPerson",value)}else{alert("添加的必须是姓王的人!")}}},mutations:{AddPerson(state,value){state.personList.unshift(value)}},state:{personList:[{id:"001",name:"张三"}]},getters:{firstPersonName(state){return state.personList[0].name}}
}//创建并暴露store
export default new Vuex.Store({modules:{countAbout:countOptions,personAbout:personOptions}
})

Calculation.vue

Persons.vue

App.vue

请添加图片描述

发送Ajax请求处理并拆分store

在这里插入图片描述

请求

https://api.uixsj.cn/hitokoto/get?type=social
随机生成语录

src/store/personOptions.js

//人员相关的配置
import axios from "axios";
import {nanoid} from 'nanoid'
export default {namespaced:true,actions:{addPersonWang(context,value){if(value.name.indexOf("王")==0){context.commit("AddPerson",value)}else{alert("添加的必须是姓王的人!")}},addPerson(context){axios.get("https://api.uixsj.cn/hitokoto/get?type=social").then(response=>{context.commit("AddPerson",{id:nanoid(),name:response.data})},error=>{alert(error.message)})}},mutations:{AddPerson(state,value){state.personList.unshift(value)}},state:{personList:[{id:"001",name:"张三"}]},getters:{firstPersonName(state){return state.personList[0].name}}
}

src/store/countOptions.js

//求和相关的配置
const countOptions={namespaced:true,//准备actions——用于响应组件中的动作actions:{addOdd(context,value){if(context.state.sum%2){console.log("actions中的addOdd被调用了")context.commit("Addmore",value)}},addWait(context,value){setTimeout(()=>{console.log("actions中的addWait被调用了")context.commit("Addmore",value)},500)}},//准备mutations——用于操作数组(state)mutations:{Addmore(state,value){console.log("mutations中的Addmore被调用了")state.sum+=value},Deduce(state,value){console.log("mutations中的Deduce被调用了")state.sum-=value},},//准备state——用于存储数组state:{sum:0,school:"幸福大学",subject:"计算机",},//准备getters——用于将state中的数据进行加工getters:{bigSum(state){return state.sum*10}}
}
export default countOptions

main.js

import Vue from 'vue'import App from './App'
//引入vue-resource插件
import vueresource from 'vue-resource'//引入store
import store from './store'Vue.config.productionTip = false
//使用vue-resource插件
Vue.use(vueresource)new Vue({el: "#app",render: h => h(App),store,beforeCreate() {Vue.prototype.$bus = this}
})

src/store/index.js

//该文件用于创建Vuex中最为核心的store
import Vue from 'vue'
//引入Vuex
import Vuex from 'vuex'
//应用vuex插件
Vue.use(Vuex)//引入
import countOptions from "@/store/countOptions";
import personOptions from "@/store/personOptions";//创建并暴露store
export default new Vuex.Store({modules:{countAbout:countOptions,personAbout:personOptions}
})

Persons.vue

Calculation.vue

App.vue

请添加图片描述

总结:模块化+命名空间

  1. 目的:让代码更好维护,让多种数据分类更加明确
  2. 修改store.js
const countAbout={namespaced:true,//开启命名空间state:{x},mutations:{...},actions:{...},getters:{bigSum(state){return state.sum*10}}
}const personAbout={namespaced:true,//开启命名空间state:{...},mutations:{...},actions:{...}
}const store=new Vuex.Store({modules:{countAbout,personAbout}
})
  1. 开启命名空间后,组件中读取state数据
//方式一:自己直接读取
this.$store.state.personAbout.list
//方式二:借助mapState读取
...mapState('countAbout',['sum','school','subject']),
  1. 开启命名空间后,组件中读取getters数据
//方式一:自己直接读取
this.$store.getters['personAbout/firstPersonName']
//方式二:借助mapGetters读取
...mapGetters('countAbout',['bigSum']),
  1. 开启命名空间后,组件中调用dispatch
//方式一:自己直接dispatch
this.$store.dispatch('personAbout/addPersonWang',person)
//方式二:借助mapActions读取
...mapActions('countAbout',{incrementOdd:'jiaOdd',incrementWait:'jiaWait'}),
  1. 开启命名空间后,组件中调用commit
//方式一:自己直接commit
this.$store.commit('personAbout/ADD_PERSON',person)
//方式二:借助mapMutations读取
...mapMutations('countAbout',{incrementOdd:'JIA',decrement:'JIAN'}),

相关内容

热门资讯

能不能给我《猫武士》第一本的第... 能不能给我《猫武士》第一本的第一个啊?呼唤野性的第一章如果能给我很多的话就更好啦!回答好我就给你一串...
高手们请帮忙翻译下下面的文章,... 高手们请帮忙翻译下下面的文章,急用,谢谢了!翻译成英文?
落跑甜心大结局是什么啊,具体的 落跑甜心大结局是什么啊,具体的男主角和女主角在一个没人的山坡举行婚礼仪式,仪式结束后,藏在山坡下的亲...
关于冬风的诗句 关于冬风的诗句千里黄云白日曛,北风吹雁雪纷纷。(唐·高适《别董大》)
林如海的介绍 林如海的介绍林如海,是清代小说《红楼梦》中的人物,巡盐御史,娶妻贾敏,林黛玉之父。
南阳有几个监狱,具体位置在哪,... 南阳有几个监狱,具体位置在哪,盗墓被判了大概五年,会在南阳那个监狱?哥,难道你就是传说中的摸金校尉。
有一本游戏小说主角是一个监狱的... 有一本游戏小说主角是一个监狱的人,还是秘密组织的人他得到一个神器叫沙盗王的戒指,上面有一段话是什么英...
形容不团结的成语有哪些? 形容不团结的成语有哪些?1、一盘散沙,、各奔东西2、,四分五裂、拳中掿沙3、七支八搭、勾心斗角4、自...
我们都一样年轻又彷徨中因为读了... 我们都一样年轻又彷徨中因为读了这本书抑郁症好了的是那一篇?保险杠铃声多多关照了我在家级的多吃点东西都...
小说炎景熙和陆沐擎最后在一起了... 小说炎景熙和陆沐擎最后在一起了吗熙带着花环和志焕一起拍了一张两个人的照片,那也是最后的一张照片,至此...
求有关化肥的绕口令。 求有关化肥的绕口令。1、初入江湖:化肥会挥发2、小有名气:黑化肥发灰,灰化肥发黑3、名动一方:黑化肥...
小喜鹊是怎样起床的 小喜鹊是怎样起床的早上大喜鹊从早上四点开始捕食喂小鸟,一直到晚上,早上小喜鹊和大喜鹊都醒了自身的生物...
贝贝小南瓜的生长资料? 贝贝小南瓜的生长资料?贝贝南瓜需要提前将种子浸泡一夜。幼苗定植一个月后,需要对土壤进行深耕,施肥。每...
苗族姑娘怎么画? 苗族姑娘怎么画? 画清楚,画好一些 找专业画家画啊,我就知道 , 兄弟壁画 挺好的,中国最大的了
求一篇科幻小说,男主被流放到一... 求一篇科幻小说,男主被流放到一颗有人形生物的星球,不断杀掉长相和地球人不同的外星生物男主被流放到一颗...
柳树怎么画 柳树怎么画柳树怎么画
快穿文女主姓宋叫什么歌,男主第... 快穿文女主姓宋叫什么歌,男主第一个位面姓林,叫什么不知道了,里面还有一个位面是腹黑王妃的?男主是那个...
哑舍同人文 哑舍同人文最好是上传的TAT~~~没有写哑舍同人文哦,怨念。。。。。。。。不过玄色大神在赤锁吧写了一...
陆墨宸简汐和刘雨彤的小说叫什么... 陆墨宸简汐和刘雨彤的小说叫什么名字宠婚:总裁在上
加法是什么意思? 加法是什么意思? 很高兴告诉你!加法: 把两个数合并成一个数的运算 把两个小数合并成一源粗带个小...