vuex 动态注册方法 registerModule的实现


Posted in Javascript onJuly 03, 2019

Vuex(2.3.0+)可以用store.registerModule方法在进入路由时进行注册,离开路由时候销毁 actions, mutations, getters, state,在一定范围内相同名称不会被覆写

例子

index.js

传this 的写法

module.exports = {
  install(_this) {
    _this.$store.registerModule(['abc'], {
      namespaced: true,
      state: {
        rightTest: 999
      },
      actions: {
        setTest: ({commit}, val) => {
          commit('putTest', val)
        }
      },
      mutations: {
        putTest: (state, val) => {
          state.rightTest = val;
        }
      }
    })
  },
  uninstall(_this) {
    _this.$store.unregisterModule(['abc'])
  }
};

不传this,有写 store 的写法

import store from '../../store';

export default {
  install() {
    store.registerModule(['abc'], {
      namespaced: true,
      state: {
        rightTest: 999
      },
      actions: {
        setTest: ({commit}, val) => {
          commit('putTest', val)
        }
      },
      mutations: {
        putTest: (state, val) => {
          state.rightTest = val;
        }
      }
    })
  },
  uninstall() {
    store.unregisterModule(['abc'])
  }
}

调用方法时应该在创建完实例之后的钩子中,未创建实例调用会找不到 store。

在install、uninstall时,传递this过去,可以在上面中直接调用。

dispath 时,如果设置了命名空间,则一定要加上,我这个因为没使用较复杂的命名,注册时的名字就在命名空间那用了。

test.vue

import abc from '../../store/test';
...
created() {
  // 挂载对应的 store
  abc.install(this);
  console.log(this.$store, 'install');
},
destroyed() {
  // 销毁对应的 store
  abc.uninstall(this);
  console.info(this.$store, 'uninstall');
},
methods: {
 test(){
  this.$store.dispatch('abc/setTest', Math.random());
 }

总结

当范围内使用动态方法注册 actions 时还是比较爽的,而且在destroyed 钩子中销毁可以节省一部分资源;

配置命名空间也可以避免覆盖问题,算是多一种手段吧(感觉还是应用在多模块,全局注册时用到这个);

当没有父子关系时,但还需要多页面共享状态,可以用动态注册就不太方便了;
(我好像还是没解决全局注册时方法过多的问题。。。)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
基于mootools插件实现遮罩层新手引导
May 24 Javascript
jquery 获取标签名(tagName)示例代码
Jul 11 Javascript
js如何取消事件冒泡
Sep 23 Javascript
原生JavaScript实现动态省市县三级联动下拉框菜单实例代码
Feb 03 Javascript
jQuery 3.0 的 setter和getter 模式详解
Jul 11 Javascript
原生Javascript和jQuery做轮播图简单例子
Oct 11 Javascript
jQuery双向列表选择器select版
Nov 01 Javascript
微信小程序利用co处理异步流程的方法教程
May 20 Javascript
jQuery实现点击关注和取消功能
Jul 03 jQuery
js数组实现权重概率分配
Sep 12 Javascript
详解Vuex中mapState的具体用法
Sep 28 Javascript
jQuery md5加密插件jQuery.md5.js用法示例
Aug 24 jQuery
微信小程序中如何使用flyio封装网络请求
Jul 03 #Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
Jul 03 #jQuery
使用vue实现各类弹出框组件
Jul 03 #Javascript
elementUI vue this.$confirm 和el-dialog 弹出框 移动 示例demo
Jul 03 #Javascript
使用微信SDK自定义分享的方法
Jul 03 #Javascript
微信小程序判断页面是否从其他页面返回的实例代码
Jul 03 #Javascript
8 个有用的JS技巧(推荐)
Jul 03 #Javascript
You might like
PHP为表单获取的URL 地址预设 http 字符串函数代码
2010/05/26 PHP
php模拟登陆的实现方法分析
2015/01/09 PHP
thinkPHP引入类的方法详解
2016/12/08 PHP
PHP数据库编程之MySQL优化策略概述
2017/08/16 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
PHP获取MySQL执行sql语句的查询时间方法
2018/08/21 PHP
php实现将数组或对象写入到文件的方法小结【三种方法】
2020/04/22 PHP
基于Jquery的将DropDownlist的选中值赋给label的实现代码
2011/05/06 Javascript
Jquery为单选框checkbox绑定单击click事件
2012/12/18 Javascript
jQuery实现列表自动循环滚动鼠标悬停时停止滚动
2013/09/06 Javascript
javascript小数精度丢失的完美解决方法
2016/05/31 Javascript
Bootstrap3 Grid system原理及应用详解
2016/09/30 Javascript
Bootstrap基本组件学习笔记之列表组(11)
2016/12/07 Javascript
Jquery鼠标放上去显示全名的实现方法
2017/02/06 Javascript
JSONP基础知识详解
2017/03/19 Javascript
手把手搭建安装基于windows的Vue.js运行环境
2017/06/12 Javascript
微信小程序的生命周期的详解
2017/10/19 Javascript
从零开始最小实现react服务器渲染详解
2018/01/26 Javascript
Bootstarp在pycharm中的安装及简单的使用方法
2019/04/19 Javascript
js实现限定区域范围拖拉拽效果
2020/11/20 Javascript
[02:39]DOTA2英雄基础教程 极限穿梭编织者
2013/12/05 DOTA
[08:44]DOTA2发布会群星聚首 我们都是刀塔人
2014/03/21 DOTA
[02:04]2014DOTA2国际邀请赛 DK一个时代的落幕
2014/07/21 DOTA
使用Python中的greenlet包实现并发编程的入门教程
2015/04/16 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
2016/07/02 Python
python fabric实现远程部署
2017/01/05 Python
Python实现Youku视频批量下载功能
2017/03/14 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
2019/07/07 Python
python爬虫之爬取百度音乐的实现方法
2019/08/24 Python
Python 微信公众号文章爬取的示例代码
2020/11/30 Python
英国美术用品购物网站:Cass Art
2019/10/08 全球购物
大学共青团员个人自我评价
2014/04/16 职场文书
中班上学期幼儿评语
2014/04/30 职场文书
无毒社区工作方案
2014/05/23 职场文书
公安四风对照检查材料思想汇报
2014/10/11 职场文书
Redis命令处理过程源码解析
2022/02/12 Redis