React 路由下 history.listen 时序不符且子组件导航不触发的求助
React Router 中
history.listen 触发时机异常问题 - 最开始使用
history.listen时,发现其回调触发时机晚于路由匹配到的子组件componentDidMount生命周期。 - 搜索到社区对应issue的内容后,按照贡献者给出的建议调整了代码,确实实现了将监听触发时机提前到子组件
componentDidMount之前的效果,但同时出现了新的问题:在不同子组件间做导航跳转时,已经注册的history.listen回调不再触发。 - 该贡献者并未提及这个伴随现象,且该表现不符合业务预期,目前已经搭建了对应的可复现案例。
自我排查后判断,一方面自身实现可能存在疏漏,另一方面该贡献者说明该异常表现是React机制导致的预期行为。因此我希望了解React Router相关的具体实现机制,找到满足业务需求的正确实现方式。
明确作为父组件注册history.listen时的两点核心需求:
- 无论URL变更是同步还是异步触发,只要发生地址变化,注册的监听回调就正常触发
- 监听的触发时机,需要落在对应路由匹配子组件的
componentDidMount生命周期之后
内容的提问来源于stack exchange,提问作者Light Yagami
相关产品推荐
相关产品推荐

