使用immutability helper update更新状态

时间:2017-01-29 11:05:49

标签: javascript reactjs immutability

我想用immutability-helper函数更新我的状态 update https://github.com/kolodny/immutability-helper

state = {
    field: '',
    items: ['Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5', 'Item 6']
  };

addElementToList() {
 const i = this.state.items.length;
 const newState = ()=> {
  update(this.state,
    {
      items: {
        $push: [
          {
            [i]: this.state.field
          }
        ]
      }
     }
   )
 };
 this.setState = newState;
}

不幸的是,执行该函数时出现以下错误。

Uncaught TypeError: (0 , _immutabilityHelper.update) is not a function

我错过了什么,对此有什么看法?

1 个答案:

答案 0 :(得分:2)

我知道OP要求提供有关使用此第三方库的答案,但此库的原始代码段生成的代码与美学类似于callback-hell:具体使用a很多嵌套大括号大括号。

因此,我只想考虑如何使用JavaScript Array.prototype.concat来实现相同的 unmutated 状态。

可能发现以下方法更清晰,更简洁。

使用Array.prototype.concat:

addElementToList() {
  const i = this.state.items.length;
  const   newState = ()=> { 
    items: this.state.items.concat([this.state.field]);
  }
  this.setState = newState;
}

使用ES6传播语法:

addElementToList() {
  const i = this.state.items.length;
  const   newState = ()=> { 
    items: [...this.state.items, this.state.field];
  }
  this.setState = newState;
}

用于比较的原始OP代码段:

它使用不变性助手库(https://github.com/kolodny/immutability-helper

addElementToList() {
  const i = this.state.items.length;
  const newState = ()=> {
    update(this.state,
      {
         items: {
           $push: [
              {
                 [i]: this.state.field
              }
           ]
        }
      }
    )
  };
  this.setState = newState;
}