几个月来使用mobx代替redux的一些总结
遇到的一些小坑
React组件内部想要调用store里的action方法,得如下图,否则不会调用(这个现在看来好像不对,待重新检验)

而不能如下图

组件中调用改变store的action后,状态变化并不会立刻反应到组件中,而后面的代码却又依赖于这个状态变化
- 若后面的代码依赖于这个状态变化,可以通过setTiemout延迟后面代码的执行(不推荐)
- 继上,也可以考虑把后面依赖store变化的代码也移到action中去
组件卸载时,store中的各值不会被清掉而继续保留
复用代码的一些小手段
把公共的store存到一个CommonStore里,其他store extend它即可,如图

mobx可以对什么做出反应(mobx核心)
必须得是Reaction或Derivations依赖的且必须是可观察属性的改变才会作出反应,非依赖的可观察属性或所有非可观察属性变量的值的改变无影响
如下图把可观察属性的值赋给另一个变量,这个变量仅仅是值的复制,是非可观察属性,对他的改变不会做出反应

- 若@boservable装饰符加在一个指向对象的变量上,那么可观察属性一定是指这个根对象中的字段(而非字段对应的值),若一个根对象中嵌套多层对象,子对象所属于的字段和每个子对象包含的所有字段都会成为可观察属性,但代表根对象的那个变量不会成为可观察属性,所以对这个变量本身重新赋值,mobx不会做出反应
- 若@boservable装饰符加在一个指向原生类型或数组的变量,那么这个变量就是可观察属性,直接改变整个数组mobx也会做出反应
- 只是引用了根对象上的一个子对象(子对象是可观察属性)却不使用任何子对象上的属性,也不会使组件re-render,如图

- 在写异步acting的回调函数中改变可观察属性的值也不会引起rerun
如何创建可随时动态反应的对象
使用extendObservable工具函数(不推荐,有很多坑)
像下图mobx不会做出反应,因为autorun定义在调用extendObservable之前,想要做出反应,autorun需要定义在调用extendObservable之后才行

使用observable 映射(推荐)

- 使用{…obj, /*在这加新属性*/}这种方式改变对象(推荐)
几个月来使用mobx代替redux的一些总结的更多相关文章
- 你需要Mobx还是Redux?
在过去一年,越来越多的项目继续或者开始使用React和Redux开发,这是目前前端业内很普遍的一种前端项目解决方案,但是随着开发项目越来越多,越来越多样化时,个人又有了不同的感受和想法.是不是因为已经 ...
- Mobx与Redux区别
Mobx的实现思想和Vue几乎一样,所以其优点跟Vue也差不多:通过监听数据(对象.数组)的属性变化,可以通过直接在数据上更改就能触发UI的渲染,从而做到MVVM.响应式.上手成本低.开发效率高,在数 ...
- Mobx总结以及mobx和redux区别
Mobx解决的问题 传统react使用的数据管理库为Redux.Redux要解决的问题是统一数据流,数据流完全可控并可追踪.要实现该目标,便需要进行相关的约束 Redux由此引出dispatch ac ...
- redux、immutablejs和mobx性能对比(三)
四.我的结论 通过第三部分的数据数据分析,我觉得我们可以得到以下结论: 无论是在开发环境还是测试环下页面的首次加载速度结果都是:redux>immutablejs>mobx,但是他们之间的 ...
- 在react项目中使用redux or mobx?
主要比较参数: 库体积,打包项目体积 开发体验 性能对比 在对比参数前首先分析一下redux和mobx的设计模式,redux和mobx都没有使用传统的mvc/mvvm形式,而且他们使用flux结构也略 ...
- 【译】Redux 还是 Mobx,让我来解决你的困惑!
原文地址:Redux or MobX: An attempt to dissolve the Confusion 原文作者:rwieruch 我在去年大量的使用了 Redux,但我最近都在使用 Mob ...
- Redux/Mobx/Akita/Vuex对比 - 选择更适合低代码场景的状态管理方案
近期准备开发一个数据分析 SDK,定位是作为数据中台向外输出数据分析能力的载体,前端的功能表现类似低代码平台的各种拖拉拽.作为中台能力的载体,SDK 未来很大概率会需要支持多种视图层框架,比如Vue2 ...
- 十分钟介绍mobx与react
原文地址:https://mobxjs.github.io/mobx/getting-started.html 写在前面:本人英语水平有限,主要是写给自己看的,若有哪位同学看到了有问题的地方,请为我指 ...
- mobx源码解读1
mobx是redux的代替品,其本身就是一个很好的MVVM框架.因此花点力气研究一下它. 网上下最新的2.75 function Todo() { this.id = Math.random() mo ...
随机推荐
- 关于Linux操作系统层次结构分析
本文转自http://www.jb51.net/LINUXjishu/214104.html 首先来看一张图(这是Linux操作系统的大致层次结构): 最内层是硬件,最外层是用户常用的应用,比如说fi ...
- gulp给文件后添加md5时间戳
这里为总的方法,实际项目中拷贝出来的,底下有详细的总结以及只针对添加时间戳的方法 1 // 引入 gulp及组件 var gulp = require('gulp'), autoprefixer = ...
- Visual Studio 2015中 安卓环境 cannot find adb.exe in specified sdk path
安装完成后 发现 C:\Program Files (x86)\Android\android-sdk\platforms 是空的,用SDK Manager进行安装时发现 它需要往C:\Program ...
- SQL表查询
CREATE TABLE student( Sno ) NOT NULL PRIMARY KEY, Sname ) NOT NULL, Ssex ) NOT NULL, Sbirthday DATET ...
- CreateFile打开文件或者打开目录
一.打开目录 参数列表: lpFileName String 要打开的文件的名字 dwDesiredAccess Long 如果为 GENERIC_READ 表示允许对设备进行读访问:如果为 GENE ...
- Python笔记8----DataFrame(二维)
目录: DataFrame概念 DataFrame创建 基本操作 查看.索引 修改.删除 统计功能 条件筛选 合并 去除空值 4. 一些常用的函数 apply memory_usage pivot_t ...
- springboot实现mongodb上传下载
1.上传: private static Logger log = LoggerFactory.getLogger(MongoDbFSUtil.class); private static final ...
- 【JavaScript框架封装】实现一个类似于JQuery的CSS样式框架的封装
// CSS 样式框架 (function (xframe) { // 需要参与链式访问的(必须使用prototype的方式来给对象扩充方法)[只要是需要使用到this获取到的元素集合这个变量的时候, ...
- linux 中配置假域名来测试
1.linux中配置假域名 找到hosts文件进行编辑 命令:vim /etc/hosts 配置: #centos(本机IP)192.168.1.179 www.imooc.com(假域名,自己设置) ...
- C#常用 API函数大全
常用Windows API1. API之网络函数WNetAddConnection 创建同一个网络资源的永久性连接WNetAddConnection2 创建同一个网络资源的连接WNetAddConne ...