52
Mobx + React 黄黄黄

React + mobx分享(黄英杰)

Embed Size (px)

Citation preview

Page 1: React + mobx分享(黄英杰)

Mobx + React

黄英杰

Page 2: React + mobx分享(黄英杰)

Mobx 是什么

Page 3: React + mobx分享(黄英杰)

Mobx

• 基于 Observer 模式的状态管理器• 轻便、高效

Page 4: React + mobx分享(黄英杰)

Redux 已经很火了

Page 5: React + mobx分享(黄英杰)

Redux 的初始化

Page 6: React + mobx分享(黄英杰)

Redux 的初始化 : Store

Page 7: React + mobx分享(黄英杰)

Redux 的初始化 : App

Page 8: React + mobx分享(黄英杰)

Copy && Paste

Page 9: React + mobx分享(黄英杰)

Redux 如何修改 State

actions

reducers

components

Page 10: React + mobx分享(黄英杰)

我是来买手机的~~

Page 11: React + mobx分享(黄英杰)

坊间传闻:谁用 Redux 谁加班

Page 12: React + mobx分享(黄英杰)

Mobx

Page 13: React + mobx分享(黄英杰)

Mobx vs Redux

simple straightforward

Page 14: React + mobx分享(黄英杰)

Define observable state

import { observable } from 'mobx';

const store = observable({

count: 0

});

Page 15: React + mobx分享(黄英杰)

Create observer Viewimport { observer } from ‘mobx-react';@observerclass CountView extends React.Component {

render() {const { store } = this.props;return

(<button>{store.count}</button>);}

}React.render(<CountView store={store} />, document.body);

Page 16: React + mobx分享(黄英杰)

Modify State….class CountView extends React.Component {

onClick = () => this.props.store.count +=1

render() { …

return (<button onClick={this.onClick}>{store.count}</button>);

}}

Page 17: React + mobx分享(黄英杰)

Mobx VS Redux

Mission all complete!

Page 18: React + mobx分享(黄英杰)

Mobx vs Redux

• Define your state and make it observable

• Create a view that responds to changes in the State

• Modify the State

Page 19: React + mobx分享(黄英杰)

Mobx vs Redux

轻松实现高性能

Page 20: React + mobx分享(黄英杰)

Mobx vs Redux

React 高性能童话

Page 21: React + mobx分享(黄英杰)

Mobx vs Redux

Page 22: React + mobx分享(黄英杰)

Redux• 全局 setState (万恶之

源)• shouldComponentUpdat

e

• immutable.js

Page 23: React + mobx分享(黄英杰)

SCU + Immutable

• 繁琐 • 改变开发习惯

Page 24: React + mobx分享(黄英杰)

@Observer

import { observer } from ‘mobx-react';@observerclass CountView extends React.Component {

……}

Page 25: React + mobx分享(黄英杰)

@observer

• 依赖了 observable 变量的组件都加上@observer 注解

• @observer 使用越多性能越高

Page 26: React + mobx分享(黄英杰)

Mobx

高性能是如何实现的?

Page 27: React + mobx分享(黄英杰)

Mobx

摒弃全局setState

Page 28: React + mobx分享(黄英杰)

Mobx : @observer

• 自动判断哪些 state 被改变• 自动且仅更新 state 已改变的

Component

• forceUpdate ,弃用全局 setState

Page 29: React + mobx分享(黄英杰)

Mobx 基本原理

响应 State 修改

Page 30: React + mobx分享(黄英杰)

实战演练环节

Page 31: React + mobx分享(黄英杰)

• What is MobX ? https://jsfiddle.net/huangyingjie1111/r41g4f3k/

• What does @observer do ?https://jsfiddle.net/huangyingjie1111/egu3j7v0/2/

Page 32: React + mobx分享(黄英杰)

Mobx @observer

react mixins

mobx.Reaction+=@observer

forceUpdate

lifecircles

Page 33: React + mobx分享(黄英杰)

Mobx : @observer

new mobx.Reaction(name, function() { …… // Update DOM React.Component.prototype .forceUpdate.call(self) });

Page 34: React + mobx分享(黄英杰)

React 生命周期 ?

Page 35: React + mobx分享(黄英杰)

import { autorun } from ‘mobx';@observerexport default class App extends Component { componentDidMount() { autorun(this.loadMessage); } loadMessage = () => {…} …}

Page 36: React + mobx分享(黄英杰)

Mobx 优势

• Simple 、 Straightforward

• high performance

Page 37: React + mobx分享(黄英杰)

Observe 原理

• Getter / Setter

• 函数式响应编程 (FRP : functional reactive programming)

• 观察者模式

Page 38: React + mobx分享(黄英杰)

Observe 原理

Mobx 本身与 React 无关

Page 39: React + mobx分享(黄英杰)

Mobx 对比 Redux 有何优势

• 初始化代码 (boilerplates) 极少

Page 40: React + mobx分享(黄英杰)

Mobx 对比 Redux 有何优势

• 初始化代码 (boilerplates) 极少• 直接、有效、简洁

Page 41: React + mobx分享(黄英杰)

Mobx 对比 Redux 有何优势• 初始化代码 (boilerplates) 极少• 直接、有效、简洁• 轻松实现高性能

Page 42: React + mobx分享(黄英杰)

如何选择

Page 43: React + mobx分享(黄英杰)

Redux VS Mobx

• Redux = CPU + 主板 + 显卡 + 键盘 + …

• Mobx = 品牌笔记本

Page 44: React + mobx分享(黄英杰)

Redux VS Mobx

• Redux = 地毯式轰炸(全局setState )

• Mobx = 精确制导( Reactive )

Page 45: React + mobx分享(黄英杰)

兼容 IE8

• Redux: Yes

• Mobx: No

Page 46: React + mobx分享(黄英杰)

像 Vue.js ?

Page 47: React + mobx分享(黄英杰)

Mobx

It is inspired by MVVM frameworks like knockout…. vue.js

Page 48: React + mobx分享(黄英杰)

计划从 React转到 Vue.js ?

Page 49: React + mobx分享(黄英杰)

Mobx + React = 强化版Vue.js

Page 50: React + mobx分享(黄英杰)

Mobx VS Vue.js

Mobx 的简洁 + React 的虚拟 DOM > Vue.js

Page 52: React + mobx分享(黄英杰)