简化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 相关文章推荐
filters.revealTrans.Transition使用方法小结
Aug 19 Javascript
鼠标事件延时切换插件
Mar 12 Javascript
js中用window.open()打开多个窗口的name问题
Mar 13 Javascript
js中取得变量绝对值的方法
Jan 03 Javascript
纯js模拟div层弹性运动的方法
Jul 27 Javascript
使用jQuery Rotare实现微信大转盘抽奖功能
Jun 20 Javascript
Angular2利用组件与指令实现图片轮播组件
Mar 27 Javascript
原生JS封装animate运动框架的实例
Oct 12 Javascript
vue之浏览器存储方法封装实例
Mar 15 Javascript
JavaScript学习笔记之DOM操作实例分析
Jan 08 Javascript
js实现倒计时秒杀效果
Mar 25 Javascript
在JavaScript中如何使用宏详解
May 06 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后端方法)
2016/02/03 PHP
网页常用特效代码整理
2006/06/23 Javascript
js实现日期级联效果
2014/01/23 Javascript
使用upstart把nodejs应用封装为系统服务实例
2014/06/01 NodeJs
js中setTimeout()与clearTimeout()用法实例浅析
2015/05/12 Javascript
AngularJS的内置过滤器详解
2015/05/14 Javascript
jQuery中的ajax async同步和异步详解
2015/09/29 Javascript
通过网页查看JS源码中汉字显示乱码的解决方法
2016/10/26 Javascript
基于bootstrap的文件上传控件bootstrap fileinput
2016/12/23 Javascript
Require.JS中的几种define定义方式示例
2017/06/01 Javascript
AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能示例
2018/04/21 Javascript
js 实现 list转换成tree的方法示例(数组到树)
2019/08/18 Javascript
[01:02:55]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
Python打印scrapy蜘蛛抓取树结构的方法
2015/04/08 Python
使用PDB简单调试Python程序简明指南
2015/04/25 Python
Python使用ntplib库同步校准当地时间的方法
2016/07/02 Python
深入flask之异步非堵塞实现代码示例
2018/07/31 Python
python lxml中etree的简单应用
2019/05/10 Python
Python实现带下标索引的遍历操作示例
2019/05/30 Python
使用CSS3配合IE滤镜实现渐变和投影的效果
2015/09/06 HTML / CSS
水上运动奥特莱斯:Wasterports Outlet
2018/08/08 全球购物
加拿大服装和鞋类零售商:Mark’s
2021/01/04 全球购物
自我鉴定怎么写
2013/12/05 职场文书
网络技术专业推荐信
2014/02/20 职场文书
学雷锋活动总结范文
2014/04/25 职场文书
竞选大队长演讲稿
2014/04/29 职场文书
群众路线问题查摆对照检查材料
2014/10/04 职场文书
2014年检察院个人工作总结
2014/12/09 职场文书
2015年幼儿园个人工作总结
2015/04/25 职场文书
上诉答辩状范文
2015/05/22 职场文书
小兵张嘎观后感300字
2015/06/03 职场文书
2016公司新年问候语
2015/11/11 职场文书
新手入门Mysql--概念
2021/06/18 MySQL
k8s部署redis cluster集群的实现
2021/06/24 Redis
零基础学java之循环语句的使用
2022/04/10 Java/Android
Python绘制散乱的点构成的图的方法
2022/04/21 Python