【问题标题】:Create react immutable JS nested state创建反应不可变的 JS 嵌套状态
【发布时间】:2016-07-19 18:58:29
【问题描述】:

我正在尝试将我的一些平面状态设置组合成一个设置状态对象,同时我想将此对象转换为不可变的 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: settings is not defined

顺便说一句。航空公司元素是一个对象数组

有人可以帮帮我吗?我的方法方向正确吗?一旦第一次设置了航空公司数组并且我需要更新,我是否需要在之后(更新时)使用 updateIn,还是使用 setIn 更安全?

【问题讨论】:

    标签: reactjs immutable.js setstate


    【解决方案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 了解更多详情。

    【讨论】:

    • 太棒了!哇,然后我很接近了 ;-) 但我现在确实遇到了另一个错误:预期可迭代或类似数组:[object Object]。我的航空公司变量是一个由 7 个对象组成的数组......还有什么想法吗?
    • 还有一个问题......我想在一次 setstate 调用期间向我的设置对象添加几个元素。以下在我的数组中给了我一个空的“matchAirlines”对象。你能告诉我这是否是正确的方法:设置:this.state.settings.setIn(["matchAirlines"], Immutable.fromJS(matchAirlines).toList ()),设置:this.state.settings.setIn(["airlines"], Immutable.fromJS(airlines).toList()),
    • 你真的应该打开一个新问题,因为这超出了评论中应该讨论的范围。
    • 我创建了这个问题,可以在这里找到:stackoverflow.com/questions/38468310/…
    【解决方案2】:

    settings 需要像this.state.settings.setIn... 一样引用

    【讨论】:

      猜你喜欢
      • 2021-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-29
      • 2022-06-13
      • 1970-01-01
      • 2019-06-13
      • 2019-10-03
      相关资源
      最近更新 更多