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 相关文章推荐
javascript 动态修改样式和层叠样式表代码
Apr 27 Javascript
分页栏的web标准实现
Nov 01 Javascript
JS事件Event元素(兼容IE,Firefox,Chorme)
Nov 01 Javascript
jQuery 中国省市两级联动选择附图
May 14 Javascript
js实现Select头像选择实时预览代码
Aug 17 Javascript
JavaScript中的Number数字类型学习笔记
May 26 Javascript
jQuery获取与设置iframe高度的方法
Aug 01 Javascript
一个可复用的vue分页组件
May 15 Javascript
详解用node搭建简单的静态资源管理器
Aug 09 Javascript
vue中axios的封装问题(简易版拦截,get,post)
Jun 15 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
Jul 22 Javascript
利用promise及参数解构封装ajax请求的方法
Mar 24 Javascript
微信小程序中如何使用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实现框架(一)
2006/10/09 PHP
php && 逻辑与运算符使用说明
2010/03/04 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
2015/08/31 PHP
php商品对比功能代码分享
2015/09/24 PHP
jquery中常用的SET和GET$(”#msg”).html循环介绍
2013/10/09 Javascript
jquery中radio checked问题
2015/03/16 Javascript
javascript结合canvas实现图片旋转效果
2015/05/03 Javascript
javascript 常见功能汇总
2015/06/11 Javascript
javascript引用类型之时间Date和数组Array
2015/08/27 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
2015/10/30 Javascript
详解jQuery Mobile自定义标签
2016/01/06 Javascript
jQuery事件与动画基础详解
2017/02/23 Javascript
canvas绘制一个常用的emoji表情
2017/03/30 Javascript
NodeJs模拟登陆正方教务
2017/04/28 NodeJs
JS实现数组去重方法总结(六种方法)
2017/07/14 Javascript
react-native DatePicker日期选择组件的实现代码
2017/09/12 Javascript
Vue-cli中为单独页面设置背景色的实现方法
2018/02/11 Javascript
vue中keep-alive的用法及问题描述
2018/05/15 Javascript
angular4 获取wifi列表中文显示乱码问题的解决
2018/10/20 Javascript
puppeteer库入门初探
2019/01/09 Javascript
jQuery实现html可联动的百分比进度条
2020/03/26 jQuery
解决Vue 给mapState中定义的属性赋值报错的问题
2020/06/22 Javascript
[58:11]守擂赛第二周擂主赛 DeMonsTer vs Leopard
2020/04/28 DOTA
Python3实现并发检验代理池地址的方法
2016/09/18 Python
Python使用time模块实现指定时间触发器示例
2017/05/18 Python
python 读写文件,按行修改文件的方法
2018/07/12 Python
python实现把两个二维array叠加成三维array示例
2019/11/29 Python
python3 使用Opencv打开USB摄像头,配置1080P分辨率的操作
2019/12/11 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
2021/02/02 Python
会计毕业自我鉴定
2014/02/05 职场文书
企业业务员岗位职责
2014/03/14 职场文书
党员政治学习材料
2014/05/14 职场文书
2015年三八妇女节活动总结
2015/02/06 职场文书
MySQL索引是啥?不懂就问
2021/07/21 MySQL
mybatis中注解与xml配置的对应关系和对比分析
2021/08/04 Java/Android
中国古风插画师排行榜:夏达第一,第三是阴阳师姑获鸟皮肤创作者
2022/03/18 国漫