2016-08-26 4 views
0

からコンソールで動作します私のコードからの抜粋です:不変JS - getIn()undefinedを返しますが、ここでは、ブラウザ

this.state = { 
     data: Immutable.Map({ 
     gender: "", 
     provinces: Immutable.Map(), 
     activeProvince: this.props.defaultProvince, 
     activeCity: this.props.defaultCity, 
     }) 
    } 


let cities = this.state.data.getIn(['provinces', '354']); 


The structure would look like this: 

state{ 

    gender: "", 
    activeProvince: "354", 
    provinces: { 
    354: { 
     name: "abc", 
     cities: Immutable.Map() 
    }, 

    123: { 
     name: "def", 
     cities: Immutable.Map() 
    } 
} 

「州」を得ることはそれだけを意味し87のサイズと地図を返します。値はありますが、レベルが1レベル進むと私には未定義が与えられます。ブラウザからコンソールでそれを行うと、私は期待される結果を得ることができます。 EDIT - -

省は 'toObject()' ショーを行うことによって、オブジェクトにマップ変換

私は右の "リターン"

render(){ 

    let provinces = this.state.data.get('provinces') 
     .sortBy(province => province.get('name')) 
     .map((value, key) => { 
     return { text: value.get('name'), value: key } 
     }); 

    // Supposed to do the same thing as above (provinces) 
    // with ['provinces'] only it returns a value, adding '354' returns undefined. 
    let cities = this.state.data.getIn(['provinces', '354']); 

    console.log(cities); 

前)(レンダリングからそれをやっていますキーが存在するので、なぜgetIn( 'provinces、' 354 ')が未定義を示していますか?

答えて

0

私はあなたの問題を再現しようとすると、私は気づくことprovincesキーとその1つのレベルの子は不変ですが、namecitiesキーが実際に変更可能です。だから、私はsortBy関数を含む行にエラーが発生している。これを解決するには、Immutable.Map()の代わりにをImmutable.fromJS()と定義する必要があります。 Immutable.Map()は、オブジェクトを1つのレベルだけ不変に変換します。ただし、Immutable.fromJS()は、すべてのレベルを不変に変換します。

+0

実際には変更できません。私はちょうどそれがどのように見えるかを示した。それは今働いている。最初の州が空でレンダリングが停止するというエラーが発生しています。 – jen

関連する問題