SlideShare a Scribd company logo
1 of 52
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分享(黄英杰)

React native redux_sharing
React native redux_sharingReact native redux_sharing
React native redux_sharingSam Lee
 
11 UINavigationController
11 UINavigationController11 UINavigationController
11 UINavigationControllerTom Fan
 
前端MVC之backbone
前端MVC之backbone前端MVC之backbone
前端MVC之backboneJerry Xie
 
Redux+react js
Redux+react jsRedux+react js
Redux+react js國昭 張
 
理解 Flex item_renderer
理解 Flex item_renderer理解 Flex item_renderer
理解 Flex item_renderer鹏飞 马
 
Spring 2.x 中文
Spring 2.x 中文Spring 2.x 中文
Spring 2.x 中文Guo Albert
 
Vlog02 [eng sub]什麼是controller和如何在asp.net核心中創建controller?-what is controller ...
Vlog02  [eng sub]什麼是controller和如何在asp.net核心中創建controller?-what is controller ...Vlog02  [eng sub]什麼是controller和如何在asp.net核心中創建controller?-what is controller ...
Vlog02 [eng sub]什麼是controller和如何在asp.net核心中創建controller?-what is controller ...SernHao TV
 
ASP.NET Core 2.1設計新思維與新發展
ASP.NET  Core 2.1設計新思維與新發展ASP.NET  Core 2.1設計新思維與新發展
ASP.NET Core 2.1設計新思維與新發展江華 奚
 
Coding guideline
Coding guidelineCoding guideline
Coding guideline斯理 衛
 
BizTalk練習投影片
BizTalk練習投影片BizTalk練習投影片
BizTalk練習投影片Pou Mason
 
React vs Flux
React vs FluxReact vs Flux
React vs FluxLC2009
 
When Android meets RxJava
When Android meets RxJavaWhen Android meets RxJava
When Android meets RxJavaSean Liu
 
10 Editing UITableView
10 Editing UITableView10 Editing UITableView
10 Editing UITableViewTom Fan
 
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit TestingASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing江華 奚
 

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

react-zh-hant.pdf
react-zh-hant.pdfreact-zh-hant.pdf
react-zh-hant.pdf
 
I os 07
I os 07I os 07
I os 07
 
React native redux_sharing
React native redux_sharingReact native redux_sharing
React native redux_sharing
 
11 UINavigationController
11 UINavigationController11 UINavigationController
11 UINavigationController
 
前端MVC之backbone
前端MVC之backbone前端MVC之backbone
前端MVC之backbone
 
Redux+react js
Redux+react jsRedux+react js
Redux+react js
 
理解 Flex item_renderer
理解 Flex item_renderer理解 Flex item_renderer
理解 Flex item_renderer
 
I os 10
I os 10I os 10
I os 10
 
Spring 2.x 中文
Spring 2.x 中文Spring 2.x 中文
Spring 2.x 中文
 
I os 16
I os 16I os 16
I os 16
 
Vlog02 [eng sub]什麼是controller和如何在asp.net核心中創建controller?-what is controller ...
Vlog02  [eng sub]什麼是controller和如何在asp.net核心中創建controller?-what is controller ...Vlog02  [eng sub]什麼是controller和如何在asp.net核心中創建controller?-what is controller ...
Vlog02 [eng sub]什麼是controller和如何在asp.net核心中創建controller?-what is controller ...
 
ASP.NET Core 2.1設計新思維與新發展
ASP.NET  Core 2.1設計新思維與新發展ASP.NET  Core 2.1設計新思維與新發展
ASP.NET Core 2.1設計新思維與新發展
 
Asp.Net Mvc 1.0
Asp.Net Mvc 1.0Asp.Net Mvc 1.0
Asp.Net Mvc 1.0
 
Coding guideline
Coding guidelineCoding guideline
Coding guideline
 
BizTalk練習投影片
BizTalk練習投影片BizTalk練習投影片
BizTalk練習投影片
 
React vs Flux
React vs FluxReact vs Flux
React vs Flux
 
When Android meets RxJava
When Android meets RxJavaWhen Android meets RxJava
When Android meets RxJava
 
10 Editing UITableView
10 Editing UITableView10 Editing UITableView
10 Editing UITableView
 
Chromium多线程滚动
Chromium多线程滚动Chromium多线程滚动
Chromium多线程滚动
 
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit TestingASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
 

React + mobx分享(黄英杰)