简化vuex的状态管理方案的方法


Posted in Javascript onJune 02, 2018

在 vuejs 相关项目开发过程中,我们常常会使用 vuex 作为状态管理工具, 整个组件的状态做为单向数据流的模式管理。

简化vuex的状态管理方案的方法

事实上,在实际的使用中 vuex 可以说是相当繁琐的,每一次的需求增加需要增加 Mutations-Type Action Mutations , 为了简化这一操作,我们可以将 mutations 和 action 合并,简化流程如下:

简化vuex的状态管理方案的方法

在此种思想的引导下, muse-model 诞生了,以简单优雅的方式完成整个项目的状态管理。

什么是 muse-model

muse-model 并不是一个全新的状态管理工具, 它是基于 vuex 开发,可以说是 vuex 的一个辅助工具,在使用 muse-model 过程中,vuex 的一切 API 都是可以用的,这也方便了vuex 的用户进行过度。在初始化 muse-model 是也是需要传入 store 对象。

// model.js
import Vue from 'vue';
import Vuex from 'vuex';
import MuseModel from 'muse-model';

export const store = Vuex.Store({
 strict: true
});

export default new MuseModel(store);

使用

我们将以一个计数器的例子来演示 muse-model 的使用。

定义一个 model

model 由 namespace state action 三个部分组成

// count.js
export default {
  namespace: 'demo',
  state: {
    count: 1
  },
  add () {
    return {
      count: this.state.count + 1
    }
  },
  sub () {
    return {
      count: this.state.count - 1
    }
  }
}

不要再 action 中直接改变状态,而是通过 return 返回需要改变的新的状态.

连接组件

通过 connect 方法可以将 model 混入到组件的 computed 和 methods 中。

<template>
<div>
  <button@click="add">+</button>
  {{count}}
  <button@click="sub">-</button>
</div>
</template>
<script>
import model from './model';
import CountModel from './count';
const CountUI = {
  name: 'count-ui'
};

export default model.connect(CountUI, CountModel);
</script>

处理异步

关于异步处理只需要返回 promise 对象即可。

export default {
  //....
  addTimeOut () { // 异步处理
    return new Promise((resolve, reject) => {
     setTimeout(() => {
      resolve({
       count: this.state.count + 1
      });
     }, 1000);
    });
  }
}

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

Javascript 相关文章推荐
javascript中定义类的方法详解
Feb 10 Javascript
JavaScript动态创建form表单并提交的实现方法
Dec 10 Javascript
jQuery Validate表单验证深入学习
Dec 18 Javascript
jQuery自动完成插件completer附源码下载
Jan 04 Javascript
js实现增加数字显示的环形进度条效果
Feb 05 Javascript
BootStrap Datepicker 插件修改为默认中文的实现方法
Feb 10 Javascript
实例讲解DataTables固定表格宽度(设置横向滚动条)
Jul 11 Javascript
前端主流框架vue学习笔记第一篇
Jul 26 Javascript
js 判断一个数字是不是2的n次方幂的实例
Nov 26 Javascript
Node使用Sequlize连接Mysql报错:Access denied for user ‘xxx’@‘localhost’
Jan 03 Javascript
JS PHP字符串截取函数实现原理解析
Aug 29 Javascript
H5+css3+js搭建带验证码的登录页面
Oct 11 Javascript
深入了解javascript 数组的sort方法
Jun 01 #Javascript
js 数组详细操作方法及解析合集
Jun 01 #Javascript
vue 中动态绑定class 和 style的方法代码详解
Jun 01 #Javascript
一个简单的node.js界面实现方法
Jun 01 #Javascript
浅析前端路由简介以及vue-router实现原理
Jun 01 #Javascript
Vue中的混入的使用(vue mixins)
Jun 01 #Javascript
JavaScript实现的简单加密解密操作示例
Jun 01 #Javascript
You might like
BBS(php &amp; mysql)完整版(四)
2006/10/09 PHP
PHP中对数据库操作的封装
2006/10/09 PHP
php学习笔记 面向对象中[接口]与[多态性]的应用
2011/06/16 PHP
PHP浮点数的一个常见问题
2016/03/10 PHP
JavaScript静态的动态
2006/09/18 Javascript
两个比较有用的Javascript工具函数代码
2010/02/17 Javascript
在IE和VB中支持png图片透明效果的实现方法(vb源码打包)
2011/04/01 Javascript
深入理解JavaScript系列(16) 闭包(Closures)
2012/04/12 Javascript
基于jquery的多功能软键盘插件
2012/07/25 Javascript
Javascript表单验证要注意的事项
2014/09/29 Javascript
移动设备web开发首选框架:zeptojs介绍
2015/01/29 Javascript
jQuery实现左右切换焦点图
2015/04/03 Javascript
javascript实现数字倒计时特效
2016/03/30 Javascript
老生常谈onBlur事件与onfocus事件(js)
2016/07/09 Javascript
Javascript类型系统之undefined和null浅析
2016/07/13 Javascript
浅谈js中StringBuffer类的实现方法及使用
2016/09/02 Javascript
使用AngularJS2中的指令实现按钮的切换效果
2017/03/27 Javascript
ES6新特性三: Generator(生成器)函数详解
2017/04/21 Javascript
详解angularjs获取元素以及angular.element()用法
2017/07/25 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
2018/11/21 Javascript
小程序实现按下录音松开识别语音
2019/11/22 Javascript
理解Python中的With语句
2015/02/02 Python
Django中url的反向查询的方法
2018/03/14 Python
pandas 空的dataframe 插入列名的示例
2018/10/30 Python
英国珠宝网站Argento: PANDORA、Olivia Burton和Nomination等
2020/05/08 全球购物
商务日语毕业生自荐信范文
2013/11/14 职场文书
档案接收函范文
2014/01/10 职场文书
房地产促销活动方案
2014/03/01 职场文书
学习雷锋寄语大全
2014/04/11 职场文书
建筑结构施工求职信
2014/07/11 职场文书
2014年幼儿园国庆主题活动方案
2014/09/16 职场文书
沈阳故宫导游词
2015/01/31 职场文书
英文自荐信范文
2015/03/25 职场文书
雷锋的观后感
2015/06/10 职场文书
MySQL为id选择合适的数据类型
2021/06/07 MySQL
Python实现Matplotlib,Seaborn动态数据图
2022/05/06 Python