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 相关文章推荐
Prototype 学习 Prototype对象
Jul 12 Javascript
JavaScript实现网页图片等比例缩放实现代码及调用方式
Feb 25 Javascript
JavaScript等比例缩放图片控制超出范围的图片
Aug 06 Javascript
JavaScript将页面表格导出为Excel的具体实现
Dec 27 Javascript
DIV随滚动条滚动而滚动的实现代码【推荐】
Apr 12 Javascript
jQuery简单实现tab选项卡切换效果
Jun 20 Javascript
Vue.js系列之项目结构说明(2)
Jan 03 Javascript
JS图片轮播与索引变色功能实例详解
Jul 06 Javascript
JavaScript屏蔽Backspace键的实现代码
Nov 02 Javascript
基于Bootstrap表单验证功能
Nov 17 Javascript
vue中的计算属性的使用和vue实例的方法示例
Dec 04 Javascript
js作用域及作用域链工作引擎
Jul 07 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
thinkphp实现发送邮件密码找回功能实例
2014/12/01 PHP
46 个非常有用的 PHP 代码片段
2016/02/16 PHP
PHP中的访问修饰符简单比较
2019/02/02 PHP
QQ登录简单实现代码
2021/03/09 Javascript
Web开发之JavaScript
2012/03/29 Javascript
一个JavaScript递归实现反转数组字符串的实例
2014/10/14 Javascript
javascript模拟map输出与去除重复项的方法
2015/02/09 Javascript
自定义刻度jQuery进度条及插件
2015/09/02 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
2016/11/07 Javascript
vue页面使用阿里oss上传功能的实例(一)
2017/08/09 Javascript
微信小程序五子棋游戏的棋盘,重置,对弈实现方法【附demo源码下载】
2019/02/20 Javascript
Vue 幸运大转盘实现思路详解
2019/05/06 Javascript
vue路由拦截器和请求拦截器知识点总结
2019/11/08 Javascript
使用js和canvas实现时钟效果
2020/09/08 Javascript
Python cookbook(数据结构与算法)字典相关计算问题示例
2018/02/18 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
2019/07/04 Python
pycharm配置git(图文教程)
2019/08/16 Python
Python远程开发环境部署与调试过程图解
2019/12/09 Python
tensorflow之tf.record实现存浮点数数组
2020/02/17 Python
浅谈python3 构造函数和析构函数
2020/03/12 Python
通过实例简单了解Python sys.argv[]使用方法
2020/08/04 Python
Python学习工具jupyter notebook安装及用法解析
2020/10/23 Python
python tkinter的消息框模块(messagebox,simpledialog)
2020/11/07 Python
html5拖拽应用记录及注意点
2020/05/27 HTML / CSS
Staples英国官方网站:办公用品一站式采购
2017/10/06 全球购物
REN Clean Skincare官网:英国本土有机护肤品牌
2019/02/23 全球购物
自考自我鉴定范文
2013/10/30 职场文书
幼师求职自荐信范文
2014/01/26 职场文书
人事专员岗位职责范本
2014/03/04 职场文书
敬老院活动总结
2014/04/28 职场文书
公民授权委托书
2014/10/15 职场文书
离婚协议书范文2014(夫妻感情破裂)
2014/12/14 职场文书
2014年学校办公室工作总结
2014/12/19 职场文书
分享CSS盒子模型隐藏的几种方式
2022/02/28 HTML / CSS
Golang 并发编程 SingleFlight模式
2022/04/26 Golang
pnpm对npm及yarn降维打击详解
2022/08/05 Javascript