我正在使用 react-router
迈出我的第一步。
我目前正在使用 hashHistory
用于开发目的,并且我正在执行“手动”导航。也就是说,我 没有 使用 Link
而是调用 history.push('/some/route');
以进行导航(响应对锚标记的普通旧点击)。
我注意到的是,即使我已经在目标路线上, react-router
每次调用 history.push('/target/route');
时都会重新呈现相关的目标组件:在每次 push('/target/route')
:
- URL 的片段部分保留
#/target/route
- URL 的查询字符串部分更改为
?_k=somethingRandom
- 目标组件重新渲染
我希望重新渲染 不会 发生——我实际上预计 history.push
是一个空操作,当我已经在我尝试的路线上 push
。
我显然遗漏了一些东西,因为这不是正在发生的事情。有趣的是,我看到有人发帖试图 实现 我想摆脱的行为——可以这么说,他们想在不离开路线的情况下“刷新”路线。这看起来很像相反的问题:)。
你能告诉我我误解了什么以及我将如何实现所需的行为吗?如果(当)我切换到 browserHistory
时,这可能会消失吗?
原文由 biril 发布,翻译遵循 CC BY-SA 4.0 许可协议
我的猜测是,您的组件重新呈现是因为您的
prop
中的某些内容在您进行路由器推送时发生了变化。我怀疑它可能是action
或key
的属性prop.location
。您始终可以在每次渲染期间检查prop
的所有值,以查看有何变化。您可以通过在
shouldComponentUpdate
生命周期方法中将旧路由路径与新路由路径进行比较来解决此问题。如果它没有改变你在同一条路线上,你可以通过返回false
来防止重新渲染。在所有其他情况下,返回true
。默认情况下,这总是返回 true。您必须进行进一步检查,这将阻止您的组件更新
state
组件内的更新,但我想这将是您的起点。在官方 React 文档 页面上阅读有关
shouldComponentUpdate
的更多信息。