SlideShare a Scribd company logo
Mobx + React
黄英杰
Mobx是什么
Mobx
• 基于Observer模式的状态管理器
• 轻便、高效
Redux已经很火了
Redux的初始化
Redux的初始化: Store
Redux的初始化: App
Copy && Paste
Redux 如何修改State
actions
reducers
components
我是来买手机的
~~
坊间传闻:
谁用Redux谁加班
Mobx
Mobx vs Redux
simple straightforward
Define observable state
import { observable } from 'mobx';
const store = observable({
count: 0
});
Create observer View
import { observer } from ‘mobx-react';
@observer
class CountView extends React.Component {
render() {
const { store } = this.props;
return (<button>{store.count}</button>);
}
}
React.render(<CountView store={store} />,
document.body);
Modify State
….
class CountView extends React.Component {
onClick = () => this.props.store.count +=1
render() {
…
return (<button
onClick={this.onClick}>{store.count}</button>);
}
}
Mobx VS Redux
Mission all
complete!
Mobx vs Redux
• Define your state and make it
observable
• Create a view that responds to changes
in the State
• Modify the State
Mobx vs Redux
轻松实现高性能
Mobx vs Redux
React高性能
童话
Mobx vs Redux
Redux
• 全局setState(万恶之源)
• shouldComponentUpdate
• immutable.js
SCU + Immutable
• 繁琐
• 改变开发习惯
@Observer
import { observer } from ‘mobx-react';
@observer
class CountView extends React.Component {
……
}
@observer
• 依赖了observable 变量的组件都加上
@observer 注解
• @observer 使用越多性能越高
Mobx
高性能是如何实现的?
Mobx
摒弃全局
setState
Mobx:@observer
• 自动判断哪些state被改变
• 自动且仅更新state已改变的Component
• forceUpdate,弃用全局setState
Mobx基本原理
响应State修改
实战演练环节
• What is MobX ?
https://jsfiddle.net/huangyingjie1111/r41g4f3k/
• What does @observer do ?
https://jsfiddle.net/huangyingjie1111/egu3j7v0/2/
Mobx @observer
react mixins mobx.Reaction+=@observer
forceUpdate
lifecircles
Mobx:@observer
new mobx.Reaction(name, function() {
……
// Update DOM
React.Component.prototype
.forceUpdate.call(self)
});
React生命周期?
import { autorun } from ‘mobx';
@observer
export default class App extends Component {
componentDidMount() {
autorun(this.loadMessage);
}
loadMessage = () => {…}
…
}
Mobx优势
• Simple、Straightforward
• high performance
Observe原理
• Getter / Setter
• 函数式响应编程(FRP:functional
reactive programming)
• 观察者模式
Observe原理
Mobx本身与React无关
Mobx对比Redux有何优势
• 初始化代码(boilerplates)极少
Mobx对比Redux有何优势
• 初始化代码(boilerplates)极少
• 直接、有效、简洁
Mobx对比Redux有何优势
• 初始化代码(boilerplates)极少
• 直接、有效、简洁
• 轻松实现高性能
如何选择
Redux VS Mobx
• Redux = CPU + 主板 + 显卡 + 键盘 + …
• Mobx = 品牌笔记本
Redux VS Mobx
• Redux = 地毯式轰炸(全局setState)
• Mobx = 精确制导(Reactive)
兼容IE8
• Redux: Yes
• Mobx: No
像Vue.js ?
Mobx
It is inspired by MVVM frameworks like
knockout…. vue.js
计划从React转
到Vue.js ?
Mobx + React = 强化版Vue.js
Mobx VS Vue.js
Mobx的简洁 + React的虚拟
DOM > Vue.js
参考资料
• mobx getting start
• an in-deep explannation of mobx
• mobx git book
React + mobx分享(黄英杰)

More Related Content

Similar to React + mobx分享(黄英杰) (20)

PDF
react-zh-hant.pdf
ssuser65180a
 
PDF
I os 07
信嘉 陳
 
PDF
React native redux_sharing
Sam Lee
 
PDF
11 UINavigationController
Tom Fan
 
PPTX
前端MVC之backbone
Jerry Xie
 
PPTX
Redux+react js
國昭 張
 
PDF
理解 Flex item_renderer
鹏飞 马
 
PDF
I os 10
信嘉 陳
 
PDF
Spring 2.x 中文
Guo Albert
 
PDF
I os 16
信嘉 陳
 
PDF
Vlog02 [eng sub]什麼是controller和如何在asp.net核心中創建controller?-what is controller ...
SernHao TV
 
PDF
ASP.NET Core 2.1設計新思維與新發展
江華 奚
 
PDF
Asp.Net Mvc 1.0
Chui-Wen Chiu
 
PPT
Coding guideline
斯理 衛
 
PPSX
BizTalk練習投影片
Pou Mason
 
PDF
ppt图标上传zhi——《React前后端同构之道》-kevinyyang.pdf
dasp1055306202
 
PDF
React vs Flux
LC2009
 
PPTX
When Android meets RxJava
Sean Liu
 
PDF
10 Editing UITableView
Tom Fan
 
PPTX
Chromium多线程滚动
Microrapid.HeFei
 
react-zh-hant.pdf
ssuser65180a
 
I os 07
信嘉 陳
 
React native redux_sharing
Sam Lee
 
11 UINavigationController
Tom Fan
 
前端MVC之backbone
Jerry Xie
 
Redux+react js
國昭 張
 
理解 Flex item_renderer
鹏飞 马
 
I os 10
信嘉 陳
 
Spring 2.x 中文
Guo Albert
 
I os 16
信嘉 陳
 
Vlog02 [eng sub]什麼是controller和如何在asp.net核心中創建controller?-what is controller ...
SernHao TV
 
ASP.NET Core 2.1設計新思維與新發展
江華 奚
 
Asp.Net Mvc 1.0
Chui-Wen Chiu
 
Coding guideline
斯理 衛
 
BizTalk練習投影片
Pou Mason
 
ppt图标上传zhi——《React前后端同构之道》-kevinyyang.pdf
dasp1055306202
 
React vs Flux
LC2009
 
When Android meets RxJava
Sean Liu
 
10 Editing UITableView
Tom Fan
 
Chromium多线程滚动
Microrapid.HeFei
 

React + mobx分享(黄英杰)