Давайте останемся, у меня есть этот myObject, загруженный через вызов API:
myObject = {
fieldA: { details: 'OK', message: 'HELLO' },
fieldB: { details: 'NOT_OK', message: 'ERROR' },
}
Могут изменяться только детали и сообщение каждого поля. Я хочу, чтобы этот объект можно было наблюдать в магазине MobX (какие свойства будут определены ниже). У меня есть простой компонент React, который считывает два поля из магазина:
@observer
class App extends Component {
store = new Store();
componentWillMount() {
this.store.load();
}
render() {
return (
<div>
{this.store.fieldA && <p>{this.store.fieldA.details}</p>}
{this.store.fieldB && <p>{this.store.fieldB.details}</p>}
</div>
);
}
}
Я прочитал эту страницу, пытаясь понять, на что реагирует MobX, но все еще не получил ясная идея. В частности, какой из 4 магазинов, представленных ниже, будет работать и почему?
1/
class Store1 = {
@observable myObject = {};
@action setMyObject = object => {
this.myObject = object;
}
load = () => someAsyncStuff().then(this.setMyObject);
}
2/
class Store2 = {
@observable myObject = {};
@action setMyObject = object => {
this.myObject.fieldA = object.fieldA;
this.myObject.fieldB = object.fieldB;
}
load = () => someAsyncStuff().then(this.setMyObject);
}
3/
class Store3 = {
@observable myObject = { fieldA: {}, fieldB: {} };
@action setMyObject = object => {
this.myObject = object;
}
load = () => someAsyncStuff().then(this.setMyObject);
}
4/
class Store4 = {
@observable myObject = { fieldA: {}, fieldB: {} };
@action setMyObject = object => {
this.myObject.fieldA = object.fieldA;
this.myObject.fieldB = object.fieldB;
}
load = () => someAsyncStuff().then(this.setMyObject);
}