简化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 相关文章推荐
DWR实现模拟Google搜索效果实现原理及代码
Jan 30 Javascript
javascript 中that的含义示例介绍
May 14 Javascript
JS将滑动门改为选项卡(需鼠标点击)的实现方法
Sep 27 Javascript
jquery实现简单的全选和反选功能
Jan 02 Javascript
详解JavaScript UTC时间转换方法
Jan 07 Javascript
详解js中call与apply关键字的作用
Nov 21 Javascript
jQuery中ajax获取数据赋值给页面的实例
Dec 31 jQuery
vue 虚拟dom的patch源码分析
Mar 01 Javascript
vue左右侧联动滚动的实现代码
Jun 06 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
Feb 18 Javascript
Node.JS枚举统计当前文件夹和子目录下所有代码文件行数
Aug 23 Javascript
基于小程序请求接口wx.request封装的类axios请求
Jul 02 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
phpmyadmin 访问被拒绝的真实原因
2009/06/15 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
2017/03/31 PHP
js利用div背景,做一个竖线的效果。
2008/11/22 Javascript
js克隆对象、数组的常用方法介绍
2013/09/26 Javascript
推荐一个封装好的getElementsByClassName方法
2014/12/02 Javascript
jQuery操作cookie
2016/08/08 Javascript
利用Javascript实现BMI计算器
2016/08/16 Javascript
使用JS批量选中功能实现更改数据库中的status状态值(批量展示)
2016/11/22 Javascript
关于Vue.js一些问题和思考学习笔记(2)
2016/12/02 Javascript
jQuery为某个div加入行样式
2017/06/09 jQuery
vue.js计算属性computed用法实例分析
2018/07/06 Javascript
6行代码实现微信小程序页面返回顶部效果
2018/12/28 Javascript
vue-router 前端路由之路由传值的方式详解
2019/04/30 Javascript
nodejs使用node-xlsx生成excel的方法示例
2019/08/22 NodeJs
Vue分页效果与购物车功能
2019/12/13 Javascript
echarts饼图各个板块之间的空隙如何实现
2020/12/01 Javascript
[00:48]完美“圣”典2016风云人物:xiao8宣传片
2016/11/30 DOTA
python生成指定尺寸缩略图的示例
2014/05/07 Python
python的tkinter布局之简单的聊天窗口实现方法
2014/09/03 Python
Python标准库内置函数complex介绍
2014/11/25 Python
Python3 适合初学者学习的银行账户登录系统实例
2017/08/08 Python
Python实现的各种常见分布算法示例
2018/12/13 Python
python读写csv文件并增加行列的实例代码
2019/08/01 Python
Python socket 套接字实现通信详解
2019/08/27 Python
TensorFlow实现自定义Op方式
2020/02/04 Python
Django ModelForm操作及验证方式
2020/03/30 Python
python的链表基础知识点
2020/09/13 Python
关于h5中的fetch方法解读(小结)
2017/11/15 HTML / CSS
澳大利亚礼品卡商店:Gift Card Store
2019/06/24 全球购物
业务部门经理岗位职责
2014/02/23 职场文书
最新大学生创业计划书写作攻略
2014/04/02 职场文书
专项法律服务方案
2014/06/11 职场文书
上帝也疯狂观后感
2015/06/09 职场文书
创业计划书之家政服务
2019/09/18 职场文书
python中pandas对多列进行分组统计的实现
2021/06/18 Python
使用python绘制横竖条形图
2022/04/21 Python