创建反应不可变的JS嵌套状态

时间:2016-07-19 18:58:30

标签: reactjs immutable.js setstate

我正在尝试将一些平面状态设置组合到一个设置状态对象中,同时,我想将此对象转换为不可变的JS状态对象。

虽然我已经在构造函数中设置了初始状态,但我的密钥没有定义,但是我收到了错误。

这是我到目前为止所做的:

constructor() {
    super();

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

然后在componentWillMount中(因为我从外部API获取数据):

componentWillMount() {

    /* Some code */

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

我得到的错误是:未捕获的ReferenceError:未定义设置

顺便说一下。 airlines元素是一个对象数组

有人可以帮帮我吗?我的方法是否正确?一旦首次设置航空公司阵列并且我需要更新,或者使用setIn更安全,我是否需要在事后使用updateIn(更新时)?

2 个答案:

答案 0 :(得分:1)

settings需要像this.state.settings.setIn...

一样引用

答案 1 :(得分:1)

如错误所示,settings未在此位置定义。

相反,指的是您所在州的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 docsthis SO answer