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

数组push的问题

数组push的问题

慕少森 2018-08-23 15:49:12
代码:this.state={    data:[] }this.arr=[]this.setState({     data:this.state.data.push(ele)    //此时提示push不是一个方法})this.arr.push(ele)    //正常运行虽然说push返回的是新数组的长度,但是this.arr确可以用push,而this.state.data确不可以用而只能用cancat,这是为什么?
查看完整描述

2 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

在React的渲染机制中,直接修改状态值不能触发重新渲染,只能通过调用setState的方式执行,这个方法是个异步方法,它将改动放到一个队列中,React会合并这个队列中的所有改动,判断state是否发生改变,从而决定是否需要重新渲染。

对于数组类型的state,比如这里的data. React规定:state中包含的所有状态都应该是不可变对象。这样它在判断状态是否发生变化时就很简单了-只需要判断引用是否一样即可。 而数组的concat方法就是创建了一个全新数组,React这才认为state.data发生变化了。


查看完整回答
反对 回复 2018-08-26
?
繁星coding

TA贡献1797条经验 获得超4个赞

setState是用来更新State的,而你push也是为了更新数据(实际上这是不允许的,因为更新数据只能用setState)。

试一试这样

this.setState({    data:[...this.state.data,ele]//setState里面设置新的值应该是赋值,而不是执行相关的函数})


查看完整回答
反对 回复 2018-08-26
  • 2 回答
  • 0 关注
  • 919 浏览
慕课专栏
更多

添加回答

举报

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