简化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 相关文章推荐
JS中style属性
Oct 11 Javascript
使用JavaScript 实现各种跨域的方法
May 08 Javascript
jquery放大镜效果超漂亮噢
Nov 15 Javascript
jquery提交form表单简单示例分享
Mar 03 Javascript
JS控制网页动态生成任意行列数表格的方法
Mar 09 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记9)
Dec 24 Javascript
树结构之JavaScript
Jan 24 Javascript
详解Vue2.0之去掉组件click事件的native修饰
Apr 20 Javascript
JS实现多级菜单中当前菜单不随页面跳转样式而发生变化
May 30 Javascript
浅谈JS封闭函数、闭包、内置对象
Jul 18 Javascript
JS简单获得节点元素的方法示例
Feb 10 Javascript
vue.js的简单自动求和计算实例
Nov 08 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中上传大体积文件时需要的设置
2006/10/09 PHP
php+dojo 的数据库保存拖动布局的一个方法dojo 这里下载
2007/03/07 PHP
php跨站攻击实例分析
2014/10/28 PHP
Dwz与thinkphp整合下的数据导出到Excel实例
2014/12/04 PHP
360搜索引擎自动收录php改写方案
2018/04/28 PHP
js获取select默认选中的Option并不是当前选中值
2014/05/07 Javascript
浅谈被jQuery抛弃的函数及替代函数
2015/05/03 Javascript
jQuery 自定义下拉框(DropDown)附源码下载
2016/07/22 Javascript
jQuery仿IOS弹出框插件
2017/02/18 Javascript
详解Angular 4.x NgTemplateOutlet
2017/05/24 Javascript
浅析webpack 如何优雅的使用tree-shaking(摇树优化)
2017/08/16 Javascript
js前端导出Excel的方法
2017/11/01 Javascript
three.js 入门案例详解
2018/01/23 Javascript
jQuery实现简单的Ajax调用功能示例
2019/02/15 jQuery
如何为你的JavaScript代码日志着色详解
2019/04/08 Javascript
微信小程序结合Storage实现搜索历史效果
2019/05/18 Javascript
BootstrapValidator验证用户名已存在(ajax)
2019/11/08 Javascript
一篇文章带你浅入webpack的DLL优化打包
2020/02/20 Javascript
Python连接mysql数据库的正确姿势
2016/02/03 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
2018/10/11 Python
python mac下安装虚拟环境的图文教程
2019/04/12 Python
一篇文章搞定Python操作文件与目录
2019/08/13 Python
Python气泡提示与标签的实现
2020/04/01 Python
HTML5+lufylegend实现游戏中的卷轴
2016/02/29 HTML / CSS
Perry Ellis官网:美国男士品味服装
2016/12/09 全球购物
英国旅游额外服务市场领导者:Holiday Extras(机场停车场、酒店、接送等)
2017/10/07 全球购物
美术指导助理求职信
2014/04/20 职场文书
纪念九一八事变83周年国旗下讲话稿
2014/09/15 职场文书
警察群众路线整改措施
2014/09/26 职场文书
小学生成绩单评语
2014/12/31 职场文书
建党伟业电影观后感
2015/06/01 职场文书
发票退票证明
2015/06/24 职场文书
新店开业策划方案怎么书写?
2019/07/05 职场文书
2019年中,最受大众欢迎的6本新书
2019/08/07 职场文书
Python实现简单的猜单词
2021/06/15 Python
Python实现文字pdf转换图片pdf效果
2022/04/03 Python