简化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实现代码
Oct 01 Javascript
ExtJS 刷新后如何默认选中刷新前最后一次选中的节点
Apr 03 Javascript
textarea不能通过maxlength属性来限制字数的解决方法
Sep 01 Javascript
JavaScript数据推送Comet技术详解
Apr 07 Javascript
jQuery表单验证插件解析(推荐)
Jul 21 Javascript
ES6新特性之解构、参数、模块和记号用法示例
Apr 01 Javascript
node.js实现登录注册页面
Apr 08 Javascript
Vue2单一事件管理组件通信
May 09 Javascript
vue视图不更新情况详解
May 16 Javascript
vue 解决无法对未定义的值,空值或基元值设置反应属性报错问题
Jul 31 Javascript
Vue 3.0中jsx语法的使用
Nov 13 Javascript
微信小程序tab左右滑动切换功能的实现代码
Feb 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中实现进程锁与多进程的方法
2016/09/18 PHP
jquery 常用操作整理 基础入门篇
2009/10/14 Javascript
利用jQuery实现可以编辑的表格
2014/05/26 Javascript
JavaScript验证电子邮箱的函数
2014/08/22 Javascript
JS实现当前页居中分页效果的方法
2015/06/18 Javascript
jQuery1.9.1源码分析系列(十六)ajax之ajax框架
2015/12/04 Javascript
bootstrap实现的自适应页面简单应用示例
2017/03/09 Javascript
Vue Router的懒加载路径的解决方法
2018/06/21 Javascript
手把手教你如何使用nodejs编写cli命令行
2018/11/05 NodeJs
在vue中获取微信支付code及code被占用问题的解决方法
2019/04/16 Javascript
Node 代理访问的实现
2019/09/19 Javascript
JavaScript字符和ASCII实现互相转换
2020/06/03 Javascript
详解微信小程序「渲染层网络层错误」的解决方法
2021/01/06 Javascript
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
Python脚本实现自动将数据库备份到 Dropbox
2017/02/06 Python
python读取excel表格生成erlang数据
2017/08/26 Python
python PyTorch参数初始化和Finetune
2018/02/11 Python
[原创]windows下Anaconda的安装与配置正解(Anaconda入门教程)
2018/04/05 Python
python实现凯撒密码、凯撒加解密算法
2020/06/11 Python
python中round函数如何使用
2020/06/19 Python
Python如何将模块打包并发布
2020/08/30 Python
南非领先的在线旅行社:Travelstart南非
2016/09/04 全球购物
全球最大的游戏市场:G2A
2018/07/05 全球购物
新加坡网上美容店:Hermo新加坡
2019/06/19 全球购物
彪马法国官网:PUMA法国
2019/12/15 全球购物
积极分子思想汇报
2014/01/04 职场文书
元旦红领巾广播稿
2014/02/19 职场文书
法人授权委托书格式
2014/04/08 职场文书
作文评语集锦大全
2014/04/23 职场文书
作风建设年活动总结
2014/08/27 职场文书
运动会广播稿200字
2014/10/18 职场文书
圣诞节开幕词
2015/01/29 职场文书
汽车车尾标语大全
2015/08/11 职场文书
golang 接口嵌套实现复用的操作
2021/04/29 Golang
一次线上mongo慢查询问题排查处理记录
2022/03/18 MongoDB
SpringBoot 集成短信和邮件 以阿里云短信服务为例
2022/04/22 Java/Android