前言:
目前同学们对“js分组求和”大约比较注重,你们都想要分析一些“js分组求和”的相关文章。那么小编在网上搜集了一些对于“js分组求和””的相关内容,希望大家能喜欢,各位老铁们一起来了解一下吧!看项目结构
原来store只有一个index.js文件
所有的逻辑都是写在index.js文件中的。这样不利于维护,所以要按组件拆开来写
分出3个文件
index.js 这个是总文件,主要用来组织下面2个文件,并且创建store对象用的
count.js 对应 Count.vue 组件
person.js 对应 Person.vue 组件
store/index.js
//该文件用于创建Vuex中最为核心的storeimport Vue from 'vue'//引入Vueximport Vuex from 'vuex'import countOptions from './count'import personOptions from './person'//应用Vuex插件Vue.use(Vuex)//创建并暴露storeexport default new Vuex.Store({ modules:{ countAbout:countOptions, personAbout:personOptions }})
代码解释:
import countOptions from './count' //引用count.jsimport personOptions from './person' //引用person.js
//创建并暴露storeexport default new Vuex.Store({ modules:{ countAbout:countOptions, //模块化 personAbout:personOptions }})store/count.js
//求和相关的配置export default { namespaced:true, //启用命名空间 actions:{ jiaOdd(context,value){ console.log('actions中的jiaOdd被调用了') if(context.state.sum % 2){ context.commit('JIA',value) } }, jiaWait(context,value){ console.log('actions中的jiaWait被调用了') setTimeout(()=>{ context.commit('JIA',value) },500) } }, mutations:{ JIA(state,value){ console.log('mutations中的JIA被调用了') state.sum += value }, JIAN(state,value){ console.log('mutations中的JIAN被调用了') state.sum -= value }, }, state:{ sum:0, //当前的和 school:'尚硅谷', subject:'前端', }, getters:{ bigSum(state){ return state.sum*10 } },}store/person.js
//人员管理相关的配置import axios from 'axios'import { nanoid } from 'nanoid'export default { namespaced:true, //启用命名空间 actions:{ addPersonWang(context,value){ if(value.name.indexOf('王') === 0){ context.commit('ADD_PERSON',value) }else{ alert('添加的人必须姓王!') } }, addPersonServer(context){ axios.get(';).then( response => { context.commit('ADD_PERSON',{id:nanoid(),name:response.data}) }, error => { alert(error.message) } ) } }, mutations:{ ADD_PERSON(state,value){ console.log('mutations中的ADD_PERSON被调用了') state.personList.unshift(value) } }, state:{ personList:[ {id:'001',name:'张三'} ] }, getters:{ firstPersonName(state){ return state.personList[0].name } },}
到这里已经把vuex的内容准备好了
Count.vue 组件
<template> <div> <h1>当前求和为:{{sum}}</h1> <h3>当前求和放大10倍为:{{bigSum}}</h3> <h3>我在{{school}},学习{{subject}}</h3> <h3 style="color:red">Person组件的总人数是:{{personList.length}}</h3> <select v-model.number="n"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> <button @click="increment(n)">+</button> <button @click="decrement(n)">-</button> <button @click="incrementOdd(n)">当前求和为奇数再加</button> <button @click="incrementWait(n)">等一等再加</button> </div></template><script> import {mapState,mapGetters,mapMutations,mapActions} from 'vuex' export default { name:'Count', data() { return { n:1, //用户选择的数字 } }, computed:{ //借助mapState生成计算属性,从state中读取数据。(数组写法) ...mapState('countAbout',['sum','school','subject']), ...mapState('personAbout',['personList']), //借助mapGetters生成计算属性,从getters中读取数据。(数组写法) ...mapGetters('countAbout',['bigSum']) }, methods: { //借助mapMutations生成对应的方法,方法中会调用commit去联系mutations(对象写法) ...mapMutations('countAbout',{increment:'JIA',decrement:'JIAN'}), //借助mapActions生成对应的方法,方法中会调用dispatch去联系actions(对象写法) ...mapActions('countAbout',{incrementOdd:'jiaOdd',incrementWait:'jiaWait'}) }, mounted() { console.log(this.$store) }, }</script><style lang="css"> button{ margin-left: 5px; }</style>Person.vue 组件
<template> <div> <h1>人员列表</h1> <h3 style="color:red">Count组件求和为:{{sum}}</h3> <h3>列表中第一个人的名字是:{{firstPersonName}}</h3> <input type="text" placeholder="请输入名字" v-model="name"> <button @click="add">添加</button> <button @click="addWang">添加一个姓王的人</button> <button @click="addPersonServer">添加一个人,名字随机</button> <ul> <li v-for="p in personList" :key="p.id">{{p.name}}</li> </ul> </div></template><script> import {nanoid} from 'nanoid' export default { name:'Person', data() { return { name:'' } }, computed:{ personList(){ return this.$store.state.personAbout.personList }, sum(){ return this.$store.state.countAbout.sum }, firstPersonName(){ return this.$store.getters['personAbout/firstPersonName'] } }, methods: { add(){ const personObj = {id:nanoid(),name:this.name} this.$store.commit('personAbout/ADD_PERSON',personObj) this.name = '' }, addWang(){ const personObj = {id:nanoid(),name:this.name} this.$store.dispatch('personAbout/addPersonWang',personObj) this.name = '' }, addPersonServer(){ this.$store.dispatch('personAbout/addPersonServer') } }, }</script>App.vue
<template> <div> <Count/> <hr> <Person/> </div></template><script> import Count from './components/Count' import Person from './components/Person' export default { name:'App', components:{Count,Person}, mounted() { // console.log('App',this) }, }</script>main.js 入口文件
//引入Vueimport Vue from 'vue'//引入Appimport App from './App.vue'//引入插件import vueResource from 'vue-resource'//引入storeimport store from './store'//关闭Vue的生产提示Vue.config.productionTip = false//使用插件Vue.use(vueResource)//创建vmnew Vue({ el:'#app', render: h => h(App), store, beforeCreate() { Vue.prototype.$bus = this }})模块化 + 命名空间 总结
目的:让代码更好维护,让多种数据分类更加明确。
修改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 }})
开启命名空间后,组件中读取state数据:
//方式一:自己直接读取this.$store.state.personAbout.personlist//方式二:借助mapState读取:...mapState('countAbout',['sum','school','subject']),
开启命名空间后,组件中读取getters数据
//方式一:自己直接读取this.$store.getters['personAbout/firstPersonName']//方式二:借助mapGetters读取:...mapGetters('countAbout',['bigSum'])
开启命名空间后,组件中调用dispatch
//方式一:自己直接dispatchthis.$store.dispatch('personAbout/addPersonWang',person)//方式二:借助mapActions:...mapActions('countAbout',{incrementOdd:'jiaOdd',incrementWait:'jiaWait'})
开启命名空间后,组件中调用commit
//方式一:自己直接committhis.$store.commit('personAbout/ADD_PERSON',person)//方式二:借助mapMutations:...mapMutations('countAbout',{increment:'JIA',decrement:'JIAN'})
代码摘录于尚硅谷Vue学习课件
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。