位置:首页 > web前端 > vue

vue3.x中vuex的modules模块化

dearweb 发布:2021-08-15 12:23:42阅读:

由于使用的是单一状态树,应用的所有状态会集中到一个比较大的对象,当应用复杂的时候,store对象就有可能变得比较臃肿,vuex为了解决上面的问题,所以采用了modules模块,将store进行分割,每个模块拥有自己的state,mutation,action和getter以及子模块也是可以自上而下进行分割的。

定义子模块

新建一个子模块命名为userStore

let userStore = {
  state(){
    return {
      count:1,
      list:'wuhan',
      todos:[
        {id:1,tetx:'一条河',done:true},
        {id:2,tetx:'一条大河',done:false},
      ]
    }
  },
  mutations:{
    increment(state){
      state.count++
    },
    setCount(state,num){
      state.count = num
    }
  },
  getters:{
    doneTodos:state=>{
      return state.todos.filter(todo=>todo.done)
    }
  },
  actions:{
    // 主要用于执行异步操作和mutations里面的方法
    setContent(content){
      setTimeout(()=>{
        console.log(13)
        content.commit('increment')
    },2000)
      //执行mutations里面的方法
    }
  }
}
export default userStore

定义方法并引入模块

import { createStore } from 'vuex'

//导入模块文件
import userStore from './userStore'

const store = createStore({
  modules:{
  // 写入模块
    "user":userStore
  }
})

export default store;

在模块中使用

和之前单模块获取一样,只需要加上模块名就可以了

<template>
  <div id="app">
    app...
    {{count}}
    <ul>
      {{list}}
      <li v-for="item in list" :key="item">{{ item }}</li>
    </ul>
    <hr/>
    <input type="text" placeholder="请输入数据" @keyup.enter="keyUpHandle" v-model="text">
    <button @click="addDelay">新增</button>
    <router-view/>
  </div>
</template>
<script>
// mapState 把vuex中的state数据隐射到组件的计算属性
// mapMutations 把vuex的mutations映射到methods中
// mapActions 把vuex中的actions映射到methods中
import { mapState, mapMutations, mapActions } from 'vuex'
export default {
  name: 'App',
  data () {
    return {
      text: ''
    }
  },
  computed: {
    ...mapState(['count']),
    // 第一个参数是命名空间
    ...mapState('product', ['list'])
  },
  methods: {
    ...mapMutations('product', ['add']),
    ...mapActions('product', ['addAsync']),
    keyUpHandle (e) {
      if (e) {
        this.add(e.currentTarget.value)
      }
    },
    addDelay () {
      this.addAsync(this.text)
    }
  }
}
</script>

上面就是关于vuex中modules的使用方法,你看懂了吗?代码下载vuex的下载代码

24人点赞 返回栏目 提问 分享一波

小礼物走一波,支持作者

还没有人赞赏,支持一波吧

留言(问题紧急可添加微信 xxl18963067593) 评论仅代表网友个人 留言列表

暂无留言,快来抢沙发吧!

本刊热文
网友在读
手机扫码查看 手机扫码查看