2016-07-19 2 views
1

Я пытаюсь объединить некоторые из моих настроек состояния в объекте состояния настроек и в то же время хочу преобразовать этот объект в неизменяемый объект состояния JS.Создать реагировать на неизменное JS-вложенное состояние

Я получаю ошибки, хотя мой ключ не определен, хотя я установил начальное состояние в конструкторе.

Вот то, что я до сих пор:

constructor() { 
    super(); 

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

Тогда в componentWillMount (так как я получаю данные из внешнего API):

componentWillMount() { 

    /* Some code */ 

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

Ошибки я получаю: Uncaught ReferenceError: настройки не определены

КПП. элемент авиалинии представляет собой массив объектов

Может кто-нибудь помочь мне? Является ли мой подход направленно правильным? И мне нужно использовать updateIn впоследствии (при обновлении), как только массив авиакомпаний будет установлен первым, и мне нужно обновить его, или безопаснее использовать setIn?

ответ

1

Как говорит ошибка, settings не определено в этом положении.

Вместо обратитесь к settings кусочком вашего состояния:

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

Edit: Вы также используете ImmutableJS»setIn функция неправильно:

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

См the docs или this SO answer Больше подробностей.

+0

большой! oww, тогда я был близок ;-) Но теперь я получаю еще одну ошибку: ожидаемый итеративный или массивный: [object Object]. Моя авиакомпания переменная представляет собой массив из 7 объектов ... любые мысли, а? – user3611459

+0

@ user3611459 См. Мое редактирование! – Timo

+0

Большое спасибо! работает! – user3611459

1

settings потребности ссылаться как this.state.settings.setIn...