为了账号安全,请及时绑定邮箱和手机立即绑定

react从state中获取的数组可以直接修改吗?

react从state中获取的数组可以直接修改吗?

慕容森 2018-11-13 12:40:46
如下代码感觉不合理,应该怎么写var items = this.state.items;   items[i].status = 'doing';   this.setState({         items: items   });问题出现的环境背景及自己尝试过哪些方法相关代码// 请把代码文本粘贴到下方(请勿用图片代替代码)你期待的结果是什么?实际看到的错误信息又是什么?
查看完整描述

1 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

首先不推荐这种写法,更为推荐的是immutable的写法,比如:

var items = this.state.items;  

this.setState({  
  items: items.map(item => ({...item, ...{status: 'doing'}}))  
});

为什么直接修改不推荐呢?

有两个原因:

1 . 性能问题

这种直接改变原有对象的方式导致react无法对其进行任何优化,因此
会有潜在的性能问题

2 . 很难定位问题

如果你用了purecomponent, 会发现状态无法直接更新。
原因在于purecomponent重写了SCU,SCU中通过直接判断state和props前后的引用差别来判断,因此会
返回false,导致render无法运行


查看完整回答
反对 回复 2018-11-13
  • 1 回答
  • 0 关注
  • 2163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信