简化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中巧用“闭包”实现程序的暂停执行功能
Apr 04 Javascript
用tip解决Ext列宽度不够的问题
Dec 13 Javascript
Javascript 浮点运算精度问题分析与解决
Mar 26 Javascript
JavaScript直播评论发弹幕切图功能点集合效果代码
Jun 26 Javascript
原生js实现瀑布流布局
Mar 08 Javascript
Node.js和Express简单入门介绍
Mar 24 Javascript
javascript中this用法实例详解
Apr 06 Javascript
jQuery tip提示插件(实例分享)
Apr 28 jQuery
Node.js中Bootstrap-table的两种分页的实现方法
Sep 18 Javascript
vue开发环境配置跨域的方法步骤
Jan 16 Javascript
基于Vue 撸一个指令实现拖拽功能
Oct 09 Javascript
vue-cli3项目升级到vue-cli4 的方法总结
Mar 19 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
一个PHP+MSSQL分页的例子
2006/10/09 PHP
php环境无法上传文件的解决方法
2014/04/30 PHP
php使用socket post数据到其它web服务器的方法
2015/06/02 PHP
ThinkPHP控制器详解
2015/07/27 PHP
举例讲解PHP面对对象编程的多态
2015/08/12 PHP
javascript天然的迭代器
2010/10/29 Javascript
artDialog 4.1.5 Dreamweaver代码提示/补全插件 附下载
2012/07/31 Javascript
document.documentElement和document.body区别介绍
2013/09/16 Javascript
浅析Node.js查找字符串功能
2014/09/03 Javascript
JS实现在线统计一个页面内鼠标点击次数的方法
2015/02/28 Javascript
基于JavaScript实现定时跳转到指定页面
2016/01/01 Javascript
JavaScript电子时钟倒计时第二款
2016/01/10 Javascript
jQuery绑定事件-多种实现方式总结
2016/05/09 Javascript
JS for循环中i++ 和 ++i的区别介绍
2016/07/20 Javascript
Vue.js教程之计算属性
2016/11/11 Javascript
老生常谈combobox和combotree模糊查询
2017/04/17 Javascript
微信小程序实现拍照画布指定区域生成图片
2019/07/18 Javascript
小程序中this.setData的使用和注意事项
2019/08/28 Javascript
详解Python验证码识别
2016/01/25 Python
python 控制Asterisk AMI接口外呼电话的例子
2019/08/08 Python
python读文件的步骤
2019/10/08 Python
Python3 解决读取中文文件txt编码的问题
2019/12/20 Python
Python 模拟动态产生字母验证码图片功能
2019/12/24 Python
python中二分查找法的实现方法
2020/12/06 Python
福克斯租车:Fox Rent A Car
2017/04/13 全球购物
Staples英国官方网站:办公用品一站式采购
2017/10/06 全球购物
澳大利亚二手奢侈品网站:Modsie
2019/09/23 全球购物
精彩的推荐信范文
2013/11/26 职场文书
硕士研究生自我鉴定范文
2013/12/27 职场文书
母婴店促销方案
2014/03/05 职场文书
竞选班长演讲稿500字
2014/08/22 职场文书
软环境建设心得体会
2014/09/09 职场文书
医药销售自我评价200字
2014/09/11 职场文书
院系推荐意见
2015/06/05 职场文书
2016年教师节感恩寄语
2015/12/04 职场文书
python opencv常用图形绘制方法(线段、矩形、圆形、椭圆、文本)
2021/04/12 Python