今天开始学React,暂时还没考虑Router和Flux,关于state遇到两个问题。
第一个是关于文档中对setState对于数据的处理是Merge的说法,。如果是合并,那么为什么新的state往往用了concat来处理新增的数据?
第二个问题是我在子组件通过props传递的方法更新父组件的state的时候,同时要清除子组件input的值,为什么通过setState空值,UI不更新?
求教。
今天开始学React,暂时还没考虑Router和Flux,关于state遇到两个问题。
第一个是关于文档中对setState对于数据的处理是Merge的说法,。如果是合并,那么为什么新的state往往用了concat来处理新增的数据?
第二个问题是我在子组件通过props传递的方法更新父组件的state的时候,同时要清除子组件input的值,为什么通过setState空值,UI不更新?
求教。
1.Merge的意思是如果同时有很多setState语句要处理,React会合并起来再一起处理,这样比较有效率,所以有异步处理行为的特征。
concat是串接数组或字符串用的。
2.要可控表单组件才能更动,表单中的value没有赋到对应的state值,无法用state更动的方式进行清空或更动值。
1 回答1.8k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
4 回答1.3k 阅读
1 回答1.7k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.6k 阅读✓ 已解决
2 回答871 阅读✓ 已解决
setState处理数据是对对象按照key->value的方式来merge,concat是处理数组用的,和setState没关系。之所以你看到有人用concat,是因为concat不会改变原来的数组,相对而言,我更推荐你看一下react文档里immutable helper这一章。js既然没有办法在运行时阻止你直接修改state的值,起码你作为一个有追求的程序员可以主动去遵守一些规则,比如这里的通过方法修改类成员的值,而不是直接修改。
第二个,请确认你input的value所使用的值,不能肯定的话请多使用console.log()