javascript - 防止 react-router history.push 重新加载当前路由

标签 javascript reactjs react-router

我正在使用 react-router 迈出我的第一步。

我目前正在使用 hashHistory 进行开发,并且我正在执行“手动”导航。也就是说,我使用Link,而是调用history.push('/some/route');为了导航(响应对 anchor 标签的普通点击)。

我注意到的是,即使我已经在目标路线上,react-router 也会在每次 history.push('/target/route'); 被调用:在每个 push('/target/route') 上:

  • URL 的片段部分仍然是 #/target/route
  • URL 的查询字符串部分更改为 ?_k=somethingRandom
  • 目标组件重新渲染

我希望重新渲染发生——我实际上期望history.push在我已经在路线上时是一个空操作我正在尝试推送

我显然遗漏了什么,因为这不是正在发生的事情。有趣的是,我看到有人发帖试图实现我想摆脱的行为——他们想在不离开的情况下“刷新”路线,可以这么说.这看起来很像相反的问题:)。

您能否告诉我我误解了什么以及我将如何实现所需的行为?如果(当)我切换到 browserHistory 时,这可能会消失吗?

最佳答案

我的猜测是您的组件重新呈现是因为当您进行路由器推送时 prop 中的某些内容发生了变化。我怀疑它可能是 prop.locationactionkey 属性。您始终可以在每次渲染期间检查 prop 的所有值,以查看发生了什么变化。

您可以通过在 shouldComponentUpdate 生命周期方法中将旧路由路径与新路由路径进行比较来解决此问题。如果它没有改变,你就在同一条路线上,你可以通过返回 false 来阻止重新渲染。在所有其他情况下,返回 true。默认情况下,这始终返回 true。

shouldComponentUpdate: function(nextProps, nextState) {
  if(this.props.route.path == nextProps.route.path) return false;
  return true;
}

您必须进行进一步检查,这将阻止您的组件在组件内更新 state 更新,但我想这将是您的起点。

在官方 react docs 上阅读有关 shouldComponentUpdate 的更多信息页面。

Use this as an opportunity to return false when you're certain that the transition to the new props and state will not require a component update.

关于javascript - 防止 react-router history.push 重新加载当前路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37896855/

相关文章:

javascript - 为什么我的 Framer Motion 动画发生两次?

reactjs - Uncaught Error : useNavigate() may be used only in the context of a <Router> component

javascript - 在继续下一项之前,如何在 for 循环中为一项运行函数?

javascript - JavaScript 对象中的函数

javascript - 无法让 onMouseEnter 改变 react.js 中的状态

javascript - 参数在 RN typescript 中隐式具有任何类型

javascript - 删除事件监听器

javascript - 每次用户单击输入中的空格键时如何添加 + 键

react-router - 如何在 React 组件之外访问 History 对象

javascript - 尝试遍历 React 中的多个组件