关于vuex的使用,大家自然不陌生,如果有不熟练的可以多看看vuex官网,记住一条原则:异步操作以及复杂的逻辑必须通过action实现,否则会报下列错误

Error: [vuex] do not mutate vuex store state outside mutation handlers.

项目源码

遵循原则:vuex对vue具有强依赖,vuex以及本demo只能用于vue项目。
demo拆解:实现state -> commit -> dispatch

  • 实现state

tstore.vue文件

实例化一个new TStore,new 实例化会自动包含一个constructor属性
export default new TStore({state: {count: 1}
})
复制代码

tstore.js文件

import Vue from 'vue';  // 已经说过了,vuex对vue具有强耦,必须引入vueclass TStore {// new 实例化生成的constructor属性,指向他们的构造函数  constructor 是一种用于创建和初始化class创建的对象的特殊方法constructor(options) {  // options就是new Store的实例化 是state这个对象this.state = options.state;new Vue({ data: {state: this.state}});}
}
复制代码

index.vue文件

import store from './tstore';computed: {count(){  // 由于暂时没有实现mapState的方法,只能使用当前return store.state.count;}
},
复制代码

则相当于,在TStore里找到TStore.state,又通过class TStore找到tstore.vue文件中定义的count,则在index.vue里可以使用count

  • 实现commit 定义mutations函数
  mutations: {add(state) {state.count++;}},
复制代码

调用commit
store.commit('add')

实现vuex

import Vue from 'vue';class TStore {constructor(options) {  // options就是new Store的实例化this.state = options.state;this.mutations = options.mutations;new Vue({  // vuex对于vue有强耦,只能用于vue redux则不是data: {state: this.state}});}commit(type, payload) {  // 此时type就是add,就是调用commit时传的参// this.mutations是定义的mutations函数,则this.mutations.app则是add这个函数,传入type参数即可实现const mutation = this.mutations[type];   // 拿到函数 执行mutation(this.state, payload); // 传参给mutation 也就是this.mutations函数}
}
复制代码

action的实现在源码里有详细备注,请大家多多指正。

总结

vuex实现是借用vue本身的数据响应式机制使state相应化,从而使state变化立刻相应在依赖的视图中。借助vue本身的数据响应式机制进行托管实现单向数据流。原理就是借助了vue的数据劫持,state的值变成响应式,如果state有改变,就通知组件。

上一篇
模仿vue的数据劫持,实现mvvm

转载于:https://juejin.im/post/5d01ba1af265da1b6836b6df

实现简约不简单的vuex相关推荐

  1. 简约不简单的单例模式

    [CSDN 编者按]六种模式演绎单例模式,看完你还觉得它简单吗? 作者 | 刘钊,中国农业银行研发中心,高级工程师 责编 | 欧阳姝黎 出品 | CSDN(ID:CSDNnews) 看到标题大概率有同 ...

  2. HTML5+CSS3小实例:简约不简单的社交分享按钮

    HTML5+CSS3做一组简约不简单的社交分享按钮,字体图标库用到的是 font-awesome,鼠标悬停,图标变小,边框出现,然后边框倾斜并加粗,过程伴随动画,就这样,大功告成,是不是很简单? 效果 ...

  3. HTML圆和圆角柜形的制作,圆角柜——简约不简单

    原标题:圆角柜--简约不简单 圆角柜上窄下宽,具有度的设计造型,让柜子的结构更加坚固.因此,国外常称它为"A字柜",南方多称它为"大小头".圆角柜,在造型设计上 ...

  4. 简约不简单:高级时钟插件Advanced Clock Widget Pro

    今天分享的是一款非常简约和小巧的桌面时钟,可谓是非常不错! 高级时钟插件Advanced Clock Widget Pro是一款安卓平台的桌面数字时间插件,软件本身非常小巧,只有60K左右,它除了样式 ...

  5. 重识 SQLite,简约不简单

    作者 | 董旭阳       责编 | 欧阳姝黎 出品 | CSDN博客 ????业精于勤,荒于嬉:行成于思,毁于随.--韩愈 大家好!我是只谈技术不剪发的 Tony 老师. 如果问你哪个数据库产品是 ...

  6. 简约不简单 细说专票电子化的“四个新”

    Hi~您好!杨斯维特又和您见面啦! 前几天,我们一起聊了聊"为什么专票电子化与你有关?""你真的了解专票电子化吗?" 接下来,我们透过"四新" ...

  7. 简约不简单的宝藏工具,每一款都非常实用

    推荐一:ImgUpscaler 它是一个特别有用的在线图像无损放大工具.它的主要作用是将图片放大无损,使图片更清晰: 它不需要注册和登录,操作非常简单,上传或拖动图片,支持批量处理图片,点击开始按钮开 ...

  8. Hexo主题模版推荐简约大方美丽的主题搭建教程

    Quiet 简约大方给人一种简单明了,干干净净的感觉 简约不简单,有层次感,可用于写技术方面的干货 和UI设计等 加载速度很快因为够简约,但是该有的功能都有了(个人认为) 页面没有显的特别的乱 品牌树 ...

  9. 从Android界面开发谈起(转)

    原文地址:http://blog.csdn.net/nieweilin/article/details/5967815 这篇文章没有打算有一个很好的逻辑去介绍android的某个方面,全盘大致上就是我 ...

最新文章

  1. 时空大数据 AI 研究院在京成立,助推时空产业高质量发展
  2. Python基础概念_10_异常处理
  3. DWZ-JUI 树形Checkbox组件 无法一次获取所有选中的值的解决方法
  4. JSONModel - 字符串换转实体类
  5. 安装成功配置环境变量_go语言学习笔记-Windows10开发环境安装和环境变量配置
  6. 活动推荐 | 2018网易未来科技峰会剧透!今年最热的会是什么?
  7. 学霸的迷宫-蓝桥杯算法提高-广搜 bfs 经典问题
  8. 汪华关于移动互联网兴起三大问题的解决
  9. 3t硬盘 xp_解决方案:如何在Windows XP SP3 32位系统下识别3T容​​量GPT格式的硬盘...
  10. 银河麒麟服务器操作系统V10SP2安装虚拟化管理软件
  11. 【解决】nacos Ignore the empty nacos configuration and get it based on dataId
  12. flutter-学习之发布安卓包APK
  13. 易语言制作计算软件简单步骤_情侣头像制作 一款简单又好玩的头像制作软件...
  14. Axure 下载教程
  15. 网站被挂马,谨防IIS模块挂马
  16. Python requests模块高级用法
  17. 2023速卖通开店入驻流程及费用,新店运营思路
  18. 嵌入式硬件基础知识汇总<附带与硬件密切相关的软件介绍>
  19. 利用vbox安装服务器操作系统,在Linux服务器上使用Vbox安装虚拟机(示例代码)
  20. python+windows11下切换输入法

热门文章

  1. Android开发者珍藏必备【学习资料篇】
  2. Vue.js 从 Vue Router 0.7.x 迁移
  3. 彻底弄懂 HTTP 缓存机制 —— 基于缓存策略三要素分解法
  4. 用Maven构建Mahout项目
  5. JS 简单实现公告消息自动逐条切换
  6. JWT - just what?
  7. ProxySQL Cluster 概述
  8. .重要开源协定的比较以及区别
  9. Pattern-No.03 设计模式之策略模式
  10. Hasor JDBC 的难关,嵌套事务处理思路