• Vue-3.5vuex分模块


    模块module

    由于vuex使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store对象就有可能变得相当臃肿。(当项目变得越来越大的时候,Vuex会变得越来越难以维护)

    模块创建

    先在store文件下创建modules文件夹,再创建各个模块JS

    再在index.js文件下导入模块文件

     在Vue的Vuex下查看模块

    state更为推荐的写法:写成函数的形式,return数据(保证数据的独立性)

    1. export default{
    2. state(){
    3. return{
    4. list:[]
    5. }
    6. }
    7. }

    访问模块中的state&mutation等

    尽管已经分模块了,但其实子模块的状态,还是会挂到根级别的state中,属性名就是模块名

    使用模块中state的数据

    1)直接通过模块名访问$store.state.模块名.xxx

    2)通过mapState映射

    import { mapState } from 'vuex'

    默认根级别的映射mapState(['xxx'])

    1. computed:{
    2. ...mapState(['模块名'])
    3. }

    子模块的映射mapState('模块名',['xxx'])-需要开启命名空间

    1. computed:{
    2. ...mapState(['模块名','模块名中的子属性'])
    3. }

    开启命名空间:在对应模块JS文件中添加如下代码

    1. export default{
    2. namespaced:true
    3. }

    使用模块中getters的数据

    1)直接通过模块名访问$store.getters['模块名/xxx']

    2)通过mapGetters映射

    默认根级别的映射mapGetters(['xxx'])

    子模块的映射mapGetters('模块名',['xxx'])-需要开启命名空间

    调用模块中mutation的方法

    注意:默认模块中的mutation和actions会被挂载到全局,需要开启命名空间,才会被挂载到子模块。

    如果没有开启命名空间,直接就像访问全局mutation方法语法一样访问即可,不需要有模块名,但是很不合理。

    开启命名空间后:

    1)直接通过store调用  $store.commit('模块名/xxx',额外参数)

    2)通过mapMutations映射

    默认根级别的映射mapMutations(['xxx'])

    子模块的映射mapMutations('模块名',['xxx'])-需要开启命名空间

    调用模块中actions的方法

    如果没有开启命名空间,直接就像访问全局actions方法语法一样访问即可,不需要有模块名,但是很不合理。

    开启命名空间后:

    1)直接通过store调用  $store.dispatch('模块名/xxx',额外参数)

    2)通过mapActions映射

    默认根级别的映射mapActions(['xxx'])

    子模块的映射mapActions('模块名',['xxx'])-需要开启命名空间

  • 相关阅读:
    c语言-自研定时器计划任务语法
    如何在Excel中对一个或多个条件求和?
    生产者消费者模式
    牛客网字节面试算法刷题记录
    主成分之综合竞争力案例分析
    ubuntu 23.04从源码编译安装rocm运行tensorflow-rocm
    【云原生】阿里云容器镜像服务产品
    不要再抱怨项目资源不足了,这么办都能解决
    视频集中存储/直播点播平台EasyDSS点播文件分类功能新升级
    java集合类史上最细讲解 - HashTable,Properties篇
  • 原文地址:https://blog.csdn.net/weixin_46479909/article/details/133868109