关于React中setState的两个问题

今天开始学React,暂时还没考虑Router和Flux,关于state遇到两个问题。
第一个是关于文档中对setState对于数据的处理是Merge的说法,。如果是合并,那么为什么新的state往往用了concat来处理新增的数据?
第二个问题是我在子组件通过props传递的方法更新父组件的state的时候,同时要清除子组件input的值,为什么通过setState空值,UI不更新?
求教。

阅读 5.4k
3 个回答

setState处理数据是对对象按照key->value的方式来merge,concat是处理数组用的,和setState没关系。之所以你看到有人用concat,是因为concat不会改变原来的数组,相对而言,我更推荐你看一下react文档里immutable helper这一章。js既然没有办法在运行时阻止你直接修改state的值,起码你作为一个有追求的程序员可以主动去遵守一些规则,比如这里的通过方法修改类成员的值,而不是直接修改。

第二个,请确认你input的value所使用的值,不能肯定的话请多使用console.log()

  1. 数据你怎么处理都行,没有什么 merge 一说,只要不直接修改 state

  2. 这种问题很可能是你的代码设计问题,应该贴出代码来,不然别人怎么帮你分析问题了

1.Merge的意思是如果同时有很多setState语句要处理,React会合并起来再一起处理,这样比较有效率,所以有异步处理行为的特征。

concat是串接数组或字符串用的。

2.要可控表单组件才能更动,表单中的value没有赋到对应的state值,无法用state更动的方式进行清空或更动值。

可控表单组件:https://reactjs.org/docs/form...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题