Vue中使用vuex(五)

vuex的模块化+命名空间

1. 目的:让代码更好维护,让多种数据分类更加明确.

2. 创建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('https://api.uixsj.cn/hitokoto/get?type=social').then(
        resp => {
          context.commit('ADD_PERSON', { ID: nanoid(), name: resp.data })
        },
        error => {
          console.log(error);
        }
      )
    }
  },
  mutations: {
    ADD_PERSON(state, personObj) {
      state.personList.unshift(personObj)
    }
  },
  state: {
    personList: [
      { id: '001', name: '张三' }
    ]
  },
  getters: {
    firstPersonName(state) {
      return state.personList[0].name
    }
  },
}

3. 修改store.js

//该文件用于创建Vuex中store
import Vuex from 'vuex'
import Vue from 'vue'
//引入person
import personOptions from './person'
import countOptions from './count'

Vue.use(Vuex)


//创建并暴露store
export default new Vuex.Store({
	//修改
  modules:{
    countOptions:countOptions,
    personOptions:personOptions,
  }
});

4. 开启命名空间后,组件读取state数据

//方式1 自己读取
this.$store.state.personOptions.personList
//方式2 借助mapState
...mapState('countOptions',['sum','school'])

5. 开启命名空间后,组件读取getters数据

//方式1
this.$store.getters['personOptions/firstPersonName']
//方式2
...mapGetters('countOptions',['bigSum'])

6. 开启命名空间后,组件中调用dispatch

this.$store.dispatch('personOptions/addPersonWang',person)

..mapActions('personOptions',['addPersonWang'])

7. 开启命名空间后,组件中调用commit

this.$store.commit('personOptions/ADD_PERSON',person)

...mapActions('personOptions',{addPerson:'ADD_PERSON'})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值