2016-07-19 5 views
1

내 편평한 상태 설정 중 일부를 설정 상태 개체와 결합하려고하고 있으며 동시에이 개체를 불변의 JS 상태 개체로 변환하려고합니다.반응 불변의 JS 중첩 된 상태 만들기

생성자에서 초기 상태를 설정했지만 내 키가 정의되어 있지 않지만 오류가 발생합니다. 여기

내가 지금까지 무엇을 가지고 :

componentWillMount에서 다음
constructor() { 
    super(); 

    this.state = { 
     "settings": Immutable.Map() 
    };  
} 

(I 외부 API에서 데이터를 얻을 수 있기 때문에) :

componentWillMount() { 

    /* Some code */ 

    this.setState({ 
     settings: settings.setIn({airlines: Immutable.fromJS(airlines).toList()}), 
    }); 
} 

내가 오류는 다음과 같습니다 catch되지 않은 ReferenceError가 : 설정이 정의되지 않았습니다.

Btw. airlines 요소는 객체의 배열입니다

누군가 나를 도울 수 있습니까? 나의 접근 방식은 방향이 맞습니까? 항공사 배열을 처음 설정하고 업데이트해야하거나 setIn을 사용하는 것이 더 안전한 경우 updateIn을 나중에 사용해야합니다 (업데이트시)? 오류가 말한대로

답변

1

처럼 참조 할 수 있습니다.

대신 귀하의 주settings 슬라이스를 참조하십시오

this.setState({ 
    settings: this.state.settings.setIn({airlines: Immutable.fromJS(airlines).toList()}), 
}); 

편집 : 당신은 또한 사용하는 ImmutableJS '잘못 setIn 기능 :

this.setState({ 
    settings: this.state.settings.setIn(['airlines'], Immutable.fromJS(airlines).toList()), 
}); 

참조 the docs 또는 this SO answer 상세 사항은.

+0

위대한! 아, 그때 나는 가까이에 ;-)하지만 지금은 또 다른 오류가 발생합니다 : iterable 또는 array-like : [object Object]가 예상됩니다. 내 항공사 변수는 7 가지 객체의 배열입니다 ... 어떤 생각입니까? – user3611459

+0

@ user3611459 내 편집보기! – Timo

+0

많은 감사! 공장! – user3611459

1

settings 요구 settings는이 위치에서 정의되지 않은, this.state.settings.setIn...