reducer返回的对象为空时,组件中监听不到state的变化

最近学习用react开发一个后台系统,要求有多窗口功能,我是打算用antd的tabs来模拟。现在遇到一个问题,就是在我删除最后一个tab时无法触发redux。

tabList.js

clipboard.png

点击左边的菜单会生成对应的tab标签,这个过程分别会发一个action给redux生成新的state返回给组件,同时也会把相关数据保留到localstorage中,处理刷新页面当前tab还在。当标签页有多个时,点击删除正常删除。但当只剩最后一个标签,点击删除,页面上的标签页被删除了,但没触发componentDidUpdate。导致我拿不到最新的state,也就无法存入localstorage中。刷新页面后始终有一个tab标签。

clipboard.png

点击删除按钮触发remove方法。该方法会把一个关键key传入reducer中

clipboard.png

上图的console.log在删除最后一个tab时不触发。

reducers.js

clipboard.png

点击删除action.type为REM_tabList,接收到一个key同state中的数据对比,key相同则删除对应数据。此时当state为[]时,在reducers.js中答应state能正常打印出[],而tabList.js中的mapStateToProps中的console.log(state)却未执行。

ps:尝试了使用在connect()()中使用深对比也没用。

阅读 2.7k
1 个回答

你直接改变了原来的reducers里的state的引用,redux检测不到变化了吧
直接

return state.filter(xxxxxx)

试试

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