【问题标题】:The Power Of Not Mutating Data and Assignment Destructuring不改变数据和赋值解构的力量
【发布时间】:2017-10-03 11:04:48
【问题描述】:

我正在写reactjs,我想使用The Power Of Not Mutating Data。 在下面的代码中this.state.messages['hydra:member'] 是一个对象数组,我想知道在此代码中messages 是对this.state.messages['hydra:member'] 或新数组的引用。 如果我改变它this.state.messages['hydra:member'] 会不会改变?

let {'hydra:member': messages = []} = this.state.messages;

然后呢:

if(this.state.messages['hydra:member'] !== undefined) {
    let messages = this.state.messages['hydra:member'];
}

【问题讨论】:

  • 还有一份”——什么意思?
  • 您的第二个代码没有任何意义,因为 let 变量被限制在对它没有任何作用的 if 块中。
  • 你到底想在哪里做这件事,你的问题的背景是什么?
  • @MohammadZareMoghadam 当然是参考。 JS 中没有运算符隐式克隆对象。
  • let messages 是引用还是克隆?如果我改变它this.state.messages['hydra:member'] 会改变还是不改变? @adz5a

标签: javascript reactjs variable-assignment destructuring


【解决方案1】:

要创建this.state.messages['hydra:member'] 的深层副本,您可以执行以下操作

if(this.state.messages['hydra:member'] !== undefined) {
    let messages = JSON.parse(JSON.stringify(this.state.messages['hydra:member']));
   //use messages here
}

现在,当您使用消息数组时,您不会改变状态。

【讨论】:

  • 我知道这一点,但我想知道我可以用“分配解构”来做到这一点吗?
  • 这是一种非常昂贵的深度复制方式。
  • @Ouroborus 我要去stackoverflow.com/questions/122102/… 弃权:与其他人相比,我没有亲自测试过该解决方案的效率。
猜你喜欢
  • 2017-07-22
  • 2017-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-25
相关资源
最近更新 更多