简化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 相关文章推荐
jquery 查找新建元素代码
Jul 06 Javascript
通过jQuery源码学习javascript(三)
Dec 27 Javascript
利用js 进行输入框自动匹配字符的小例子
Jun 29 Javascript
Jquery解析json数据详解
Dec 26 Javascript
JavaScript中匿名函数用法实例
Mar 23 Javascript
如何理解jQuery中的ajaxSubmit方法
Mar 13 Javascript
React学习笔记之事件处理(二)
Jul 02 Javascript
vue中使用heatmapjs的示例代码(结合百度地图)
Sep 05 Javascript
js神秘的电报密码 哈弗曼编码实现
Sep 10 Javascript
在vue项目中利用popstate处理页面返回的操作介绍
Aug 06 Javascript
vue element-ui中table合计指定列求和实例
Nov 02 Javascript
JavaScript中的宏任务和微任务详情
Nov 27 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弹出错误警告函数扩展性强
2014/01/17 PHP
PHP实现股票趋势图和柱形图
2015/02/07 PHP
Smarty最简单实现列表奇偶变色的方法
2015/07/01 PHP
PHP类的封装与继承详解
2015/09/29 PHP
PHP 7.0.2 正式版发布
2016/01/08 PHP
详解WordPress开发中用于获取分类及子页面的函数用法
2016/01/08 PHP
点击文章内容处弹出页面代码
2009/10/01 Javascript
js下用gb2312编码解码实现方法
2009/12/31 Javascript
window.location.reload()方法刷新页面弹出要再次显示该网页对话框
2013/04/24 Javascript
使用jQuery.wechat构建微信WEB应用
2014/10/09 Javascript
原生javascript实现的一个简单动画效果
2016/03/30 Javascript
Javascript 基础---Ajax入门必看
2016/07/06 Javascript
详细总结Javascript中的焦点管理
2016/09/17 Javascript
JavaScript实现Fly Bird小游戏
2016/12/15 Javascript
vue + socket.io实现一个简易聊天室示例代码
2017/03/06 Javascript
js a标签点击事件
2017/03/30 Javascript
iview中Select 选择器多选校验方法
2018/03/15 Javascript
使用jQuery动态设置单选框的选中效果
2018/12/06 jQuery
如何在selenium中使用js实现定位
2020/08/18 Javascript
vue中选中多个选项并且改变选中的样式的实例代码
2020/09/16 Javascript
Vue Elenent实现表格相同数据列合并
2020/11/30 Vue.js
python实现从网络下载文件并获得文件大小及类型的方法
2015/04/28 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
2018/02/03 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
2018/04/24 Python
python实现xml转json文件的示例代码
2020/12/30 Python
CSS3 mask 遮罩的具体使用方法
2017/11/03 HTML / CSS
websocket+sockjs+stompjs详解及实例代码
2018/11/30 HTML / CSS
尼克松手表官网:Nixon手表
2019/03/17 全球购物
耐克亚太地区:Nike APAC
2019/12/07 全球购物
路政管理求职信
2014/06/18 职场文书
2014年幼儿园重阳节活动方案
2014/09/16 职场文书
2015年财务经理工作总结
2015/05/13 职场文书
三严三实·严以律己心得体会
2016/01/13 职场文书
导游词之四川熊猫基地
2020/01/13 职场文书
Spring Boot两种全局配置和两种注解的操作方法
2021/06/29 Java/Android
CSS3 Tab动画实例之背景切换动态效果
2021/08/23 HTML / CSS