更新含嵌套对象数组的state数据:递减指定film的userlikecnt失败
修复React嵌套数组状态更新的问题
你的代码无法正常工作的核心原因是没有返回完整的新状态对象。在setData的回调函数中,你仅对films数组执行了map操作,但未将处理后的数组整合回整个state结构,同时原state中的message等其他属性也需要保留以维持状态的完整性。
修正后的代码如下:
setData(prevState => { return { ...prevState, // 保留原state的其他属性(如message) films: prevState.films.map(film => { if (film._id === id) { return { ...film, userlikecnt: film.userlikecnt - 1 }; } return film; }) }; });
关键说明
- 使用
...prevState展开原状态,确保message等非films字段不会丢失 - 将
map生成的新数组赋值给films字段,替换原数组(遵循React状态不可变原则) - 匹配到目标film时,先展开原film对象再修改
userlikecnt,避免直接修改原对象导致的状态异常
内容的提问来源于stack exchange,提问作者D. Rattansingh
相关产品推荐
相关产品推荐

