redux + react-router-dom导致的store更新但是不触发渲染的问题

代码在这里:https://codesandbox.io/s/gith...
简单描述:这是跟着redux文档学习的一个例子,开始使用redux + react-redux实现,且功能正常。之后使用了redux + react-router-dom,并把使用connect的两个容器型组件换成了普通函数组件(见代码里的containers文件夹下的FilterLink.js -> RouteLink.jsVisibleTodoList.js -> RouteTodoList.js),其他代码基本没改动,然后就出现了dispatchstore更新但是不触发渲染的问题(新增todo,或者点击todo以完成都需要切换下面的按钮来触发更新)。
Google大都是涉及connect然后用withRouter来解决这样的,但我这里没有用connect,希望有大佬能指出错误的地方,谢谢了!!!

阅读 3.5k
2 个回答

这个是原链接: https://codesandbox.io/s/gith...

使用 redux , mobx 可以管理状态;
路由是用来做页面跳转的。

现在,你想使用路由来做组件的状态管理,肯定要让组件在路由更新时,监听路由变化,并修改UI的状态,使用 componentDidUpdate 去监听(或者使用 hooks,管理组件内部的状态和生命周期)

1、使用 redux , mobx 这样的工具来处理组件之间的状态管理,单个组件的状态用state管理
2、根据路由变化,来更新组件内部的状态

问题出现的原因:组件没有setState!!!(还是理解不够透彻)
解决方法:给容器型组件一个父组件,负责两个事情,一是接收store并订阅这个store更新(用来setState),二是向其容器型子组件传递statedispatch——connect的雏形就这样出来了。如果将这个父组件封装为高阶组件,并且给子组件只传递其需要的props(通过调用mapStatemapDispatch),这应该就是乞丐版的connect了吧

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