学習の旅
5416 ワード
一、MobX
Reaction
Observer
六、MobXの使用注意
MobX , Facebook 。
, , View, , server 。
React ,react + redux + react-redux + redux-saga, view action, dispatch, reducer , store 。
MobX React , , mobx-react :
:
1、React render ;
Mobx ;
2、React Dom view , Dom
Mobx react
二、MobXと他の状態管理ツールの違い1、 Redux
conponent-->dispatch(action)-->reducer-->subscribe-->getState-->component
React-Redux
component-->actionCreator(data)-->reducer-->component
reducer MobX action, action , reducer state , reducer
2、 Vuex
component-->dispatch(action)-->mutation--(mutate)-->state-->component
vuex mutation action, mobx mutaiton, computed 。
,MobX , 。
三、MobXコアモジュールMobX :
action--(update)-->state--(update)-->computed--(trigger)-->reaction
MobX decorater ( @) , MobX !
Observable ,
@observable/Observable , 。
@observer
Observable :
1、object( Object): Observable ;
, set extendObservable;
eg:
@observable car = {color: red; name: 'Infinity'}
: extendObservable(this,{ car: {color: red; name: 'Infinity'} })
:
extendObservable(car, {price: '300w'})
2、Array:Observable , ,
sort reverse , , , ;
3、Es6 Map: observable , ; Observable Map
4、object( ): observable.box(value)
box , .get() , .set(newValue) 。
eg:
const carName = observable.box('Infinity');
console.log(carName.get());
carName.set('ofo');
Computed , @computed ;
:computed , , computed
:
@observable numbersArr = [99, 80, 79, 68, 2, 43, 1, 23];
、getter
eg:
// 2 50
@computed get computedNumbers() {
return this.numbersArr.filter((item) => {
return item * 2 > 50;
}).join(' ');
}
:
{this.props.store.computedNumbers}
、setter
set computedBumbers(value) {
this.numbersArr = [99, 80, 79, 68, 2, 43, 1, 23];
}
// set
eg:
@observable length = 2;
@computed get squared() {
return this.length * this.length;
}
set squared(value) {
this.length = Math.sqrt(value);
}
: autorun , ( / ), , autorun,
アクション “ ”, “ ”,mobx action redux vuex
, Computed
eg:
component:
sendInfo = () => {
const username = this.name.value;
const pwd = this.pwd.value;
if (!username || !pwd) {
return;
}
//
this.props.testDecStore.handleGetUserInfo();
};
store:
// 、
@action handleGetUserInfo() {
this.sendCount++;
testDecService.getUserInfo().then((data) => {
this.userInfo = data;
})
}
オートルン computed, , computed。
computed , , autorun ,
。 log , UI ,
:
1, ,
2、delay: ,
3、name:
4、onError: reaction
5、scheduler: autorun
eg:
autorun(() => {
// do something
}, {
onError(e) {
alert('error')
}
})
:
autorun(() => {
this.myname = `my name is ${this.firstName} ${this.lastName}`;
});
changeName = () => {
this.firstName = `Alice${new Date().getTime()}`;
this.lastName = `Thomas${new Date().getTime()}`;
};
autorun
{this.myname}
firstname lastname dom
しかし、観察された変数に変化があるときだけ触発したいならば、autrunを直ちに実行するのではなく、reactionを使用することができます。Reaction
Reaction
四、Mobx-reactコア概念Observer
mobx-react
Observer React , mobx.autorun
render , store
@observer observer(class ***{}) , ,
@observer class Test extends React.Component{}
const Test = observer(() => test)
inject sotres, stores props
eg:
@inject('testStore')
@observer class Test extends React.Component{}
プロバイダーProvider connect store , connect 。
provider, state
:
import { Provider } from 'mobx-react';
import store from '../stores';
...
inject ,@inject(stores); this.props
component WillReactmobx-react , render ,
オンエルローrmobx-react
:
import { onError } from 'mobx-react';
onError((error) => {
consol.log(error);
})
五、MobXソースコードの解読六、MobXの使用注意