2017-05-08 4 views
1

MobX 스토어 변수에 값을 할당하는 올바른 방법은 무엇입니까?MobX 스토어 변수 할당

replace() 함수를 사용하여 배열을 설정해야합니다. 그렇지 않으면 정규 배열이 변수에 할당되고 관찰 할 수없는 배열로 할당됩니다.

하지만 개체는 무엇입니까? setObject1() 또는 setObject2()를 사용하는 것이 올바른 방법입니까? 두 가지 옵션과 두 가지 작업을 모두 시도했습니다.

null로 시작하는 기본 유형 및 변수 초기화는 어떻습니까? 다시 규칙적인 과제물이 올바르게 작동합니까? 원래 감시 객체에 대한 참조를 잃지 않도록

class store { 
    @observable array = []; 
    @observable object = {}; 
    @observable primitive = 1; 
    @observable nullObj = null 

    @action setArray = array => { 
    this.array.replace(array) 
    } 

    @action setObject1 = object => { 
    this.object = object 
    } 

    @action setObject2 = object => { 
    this.object = observable(object) 
    } 

    @action setPrimitive = primitive => { 
    this.primitive = primitive 
    } 
} 

답변

2

당신은 extendObservable를 사용해야합니다. 새 개체에 새로운 속성이있는 경우

class Store { 
    @observable array = []; 
    @observable object = {}; 
    @observable primitive = 1; 
    @observable nullObj = null 

    @action setObject = object => { 
    extendObservable(this.object, object); 
    } 
} 

, 그 속성은 관찰되지 않습니다. 이 경우에 대신 observable map을 사용할 수 있습니다. 이것은 문서의 Common pitfalls & best practices 섹션에서 제기된다

MobX 관찰 물체가 감지하거나 이전에 관찰 선언되지 않은 속성 할당 에 반응하지 않습니다. 따라서 MobX 관찰 대상 객체 은 미리 정의 된 키가있는 레코드로 작동합니다. extendObservable(target, props)을 사용하여 새로운 관찰 가능 속성을 개체에 도입 할 수 있습니다. 그러나 객체 반복자는 for .. in 또는 Object.keys()과 같이 자동으로 반응하지 않습니다. 예를 들어 ID로 사용자를 저장하는 것과 같이 동적으로 키 객체가 필요한 경우 observable.map을 사용하여 관찰 가능 _map_s를 으로 만듭니다.

+0

this.object = observable (object) 또는 this.object = object를 사용하면 불변의 객체로 작업하고 원래의 관찰 가능 객체를 잃고 싶습니다. – Shahaf

+0

@Shahaf 알겠습니다. MobX는 본질적으로 변경 가능하므로 참조를 모두 교체하면 대상을 관찰하는 모든 관찰자는 더 이상 작동하지 않습니다. – Tholle