无法理解React.js中setState特定调用场景下的函数参数作用
问题解答
此处传入的curPosts既是当前listOfPosts状态的完整数组值,也是状态中存储的数组本身的引用实例。
- React 函数式 setState 回调的入参,永远指向当前状态的最新值的引用,你定义的
listOfPosts是对象数组,所以curPosts就是这个数组的真实实例,可以直接调用所有数组原生方法,数组内的元素也是原状态中存储的对象的引用。 - 你代码中写的
[...curPosts]是符合规范的浅拷贝操作,避免直接修改原状态数组,符合React不可变更新的要求。但需要注意:浅拷贝仅复制了数组本身,数组内的post对象仍然是原状态的引用,你直接修改newPosts[下标].alert本质是修改原状态中的对象属性,严格来说不符合不可变更新规范,推荐优化写法如下:
setListOfPosts(curPosts => { return curPosts.map(p => p.id === postId ? {...p, alert: response.data} : p ) });
不可变更新可以避免状态突变引发的渲染异常、变更检测失效等问题,是React状态更新的最佳实践。
内容的提问来源于stack exchange,提问作者Ashu
相关产品推荐
相关产品推荐

