使用Redux修改state时liked字段生效但likedBook未更新,如何修复
问题原因
LIKED分支的逻辑存在数据引用错误:你通过map生成了更新liked属性的新books数组,但计算likedBook时使用的是修改前的旧state.books,旧数组中对应书籍的liked属性仍为false,因此无法筛选到刚点赞的书籍。
修复方法
先保存更新后的books数组,再基于这个新数组筛选点赞列表即可,修改后的代码如下:
case LIKED : // 先生成更新完点赞状态的新books数组 const updatedBooks = state.books.map((book) => book.title === action.item.title ? {...book, liked: true} : book ); return { ...state, books : updatedBooks, // 基于最新的books数组生成点赞列表 likedBook : updatedBooks.filter(book => book.liked) }
可选优化:如果业务中存在同名书籍的可能性,建议给Book接口新增唯一id字段,匹配时用id替代title判断,避免误修改其他同名书籍的状态。
内容的提问来源于stack exchange,提问作者sojinLee
相关产品推荐
相关产品推荐

