简化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 相关文章推荐
免费空间广告万能消除代码
Sep 04 Javascript
javascript实现很浪漫的气泡冒出特效
Sep 05 Javascript
jquery实用技巧之输入框提示语句
Jul 28 Javascript
JS获取input file绝对路径的方法(推荐)
Aug 02 Javascript
JavaScript如何实现跨域请求
Aug 05 Javascript
详解从零搭建 vue2 vue-router2 webpack3 工程
Nov 22 Javascript
浅谈vuepress 踩坑记
Apr 18 Javascript
element ui table 增加筛选的方法示例
Nov 02 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
Aug 17 Javascript
windows实现npm和cnpm安装步骤
Oct 24 Javascript
微信小程序修改checkbox的样式代码实例
Jan 21 Javascript
基于javascript原生判断DOM是否加载完毕
Oct 14 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/06/25 PHP
PHP将二维数组某一个字段相同的数组合并起来的方法
2016/02/26 PHP
PHP之图片上传类实例代码(加了缩略图)
2016/06/30 PHP
PHP代码重构方法漫谈
2018/04/17 PHP
前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)
2010/03/04 Javascript
基于jquery的无刷新分页技术
2011/06/11 Javascript
jQuery-Tools-overlay 使用介绍
2012/07/14 Javascript
javascript仿qq界面的折叠菜单实现代码
2012/12/12 Javascript
jquery文档操作wrap()方法实例简述
2015/01/10 Javascript
JavaScript操作HTML元素和样式的方法详解
2015/10/21 Javascript
BootStrap中Datepicker控件带中文的js文件
2016/08/10 Javascript
angular和BootStrap3实现购物车功能
2017/01/25 Javascript
原生javascript实现分页效果
2017/04/21 Javascript
Vue 实现展开折叠效果的示例代码
2018/08/27 Javascript
微信小程序自定义带价格显示日历效果
2018/12/29 Javascript
nodejs微信开发之自动回复的实现
2019/03/17 NodeJs
vue+elementUI 复杂表单的验证、数据提交方案问题
2019/06/24 Javascript
详解为element-ui的Select和Cascader添加弹层底部操作按钮
2020/02/07 Javascript
[02:17]DOTA2亚洲邀请赛 RAVE战队出场宣传片
2015/02/07 DOTA
在Python中使用M2Crypto模块实现AES加密的教程
2015/04/08 Python
Python解决线性代数问题之矩阵的初等变换方法
2018/12/12 Python
PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形
2019/05/13 Python
python开发入门——set的使用
2020/09/03 Python
用python写一个带有gui界面的密码生成器
2020/11/06 Python
基于python实现监听Rabbitmq系统日志代码示例
2020/11/28 Python
CSS3实现瀑布流布局与无限加载图片相册的实例代码
2016/12/22 HTML / CSS
介绍一下SQL Server的全文索引
2013/08/15 面试题
DTD的含义以及作用
2014/01/26 面试题
咖啡蛋糕店创业计划书
2014/01/28 职场文书
冰淇淋开店创业计划书
2014/02/01 职场文书
化验室岗位职责
2015/02/14 职场文书
2015民办小学年度工作总结
2015/05/26 职场文书
远程教育集中轮训基层干部培训班学习心得体会
2016/01/09 职场文书
python3美化表格数据输出结果的实现代码
2021/04/14 Python
详解redis在微服务领域的贡献
2021/10/16 Redis
JavaWeb Servlet开发注册页面实例
2022/04/11 Java/Android