-
Notifications
You must be signed in to change notification settings - Fork 324
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
MobX 入门教程 #2
Comments
简单的用用,觉得真是无比清晰,基本把store的处理,简化为对model的处理。这种情况下,测试的编写也变的异常简单。 比较纠结的就是store的组织。redux就是单store,一棵state树。用mobx,很自然的有多个model,这些model要不要最后合成一个store,然后通过最上层的组件注入,还是每个组件拥有自己的domain store,app级的store再通过上层传入。 其实写redux也有类似的困惑,比如 现在能想到的就是,写个高阶函数, 楼主有使用mobx写点稍大项目的经验吗,期待经验分享 |
热更新是支持的 |
试用了一下,Vue即视感。其实既然这样,我完全可以考虑用Vue的,现在2.0性能也蛮不错的感觉 |
react想要支持IE8也需要自己完全编译react和redux相关代码,无法利用公共CDN里面的预编译的js |
react 要支持IE8 有一个库的 |
写了一篇 Mobx 思想的实现细节,希望能对此进行补充:ascoders/blog#16 。 至于 vue 既视感,要看未来浏览器对其语法支持的程度,目前 magic 逻辑太多,大型项目可能不便于维护。 |
这是公司 --> 公式 |
可以学习一下 |
mark |
请问, 在用inject的前提下, 有react-hot-loader热更新store的解决方案吗? |
@daiyunchao 请问你是怎么解决store热更新的 |
期待在忙完umi的空余时间写一下 mbox最佳实践 |
期待下一篇关于mobx的最佳实践 |
同样期待能有一篇最佳实践。 |
大家用 redux 这么久,有没有被那么多概念和约定烦到?
比如:
如果有,那么可以尝试下 mobx 。
什么是 mobx
mobx 只做一件事,解决 state 到 view 的数据更新问题。
mobx 是一个库 (library),不是一个框架 (framework)。他不限制如何组织代码,在哪里保存 state 、如何处理事件,怎么发异步请求等等。我们可以回归到 Vanilla JavaScript,可以和任意类库组合使用。
核心理念
mobx 引入了几个概念,
Observable state
,Derivations
和Reactions
。可以拿 Excel 表格做个比喻,
Observable state
是单元格,Derivations
是计算公式,单元格的修改会触发公司的重新计算,并返回值,而最终公式的计算结果需要显示在屏幕上(比如通过图表的方式),这是Reactions
。下面通过代码理解下这些概念,以 mobx 和 react 的组合使用为例:(Open Demo on jsfiddle)
这里通过
@observable
定义Observable state
,通过@computed
定义Derivations
,通过@observer
封装了 React Component 的 render 方法,这是Reactions
。为什么用 mobx
mobx 官网 罗列了不少区分与 flux 框架的优点,这里摘录一些比较打动我的。
简单
可以用 class 来组织和修改数据
可以用 JavaScript 引用来组织和修改数据
性能相比 redux 有优势
不足
参考之前 redux + redux-saga 的方案,这里的一些点可能会成为你我不用他的原因。
浏览器兼容性,不支持 IE8
缺少最佳实践
热替换 (Hot Module Replacement)
总结
mobx 简单高效,在用吐了 redux 之后,对 mobx 简直爱不释手。除了不支持 IE8 这个硬伤,其他缺点都还是可以接受的。我会在后面的小项目中应用它,并尝试探索一套最佳实践。
扩展阅读
The text was updated successfully, but these errors were encountered: