使用 react router 地址栏变化而页面不跳转问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 react router 地址栏变化而页面不跳转问题相关的知识,希望对你有一定的参考价值。

参考技术A 包含<Link> 的组件和包含 <Route> 的组件需要放在一个 <Router> 下面包裹起来。

React Router 浏览器历史推送和锚点

【中文标题】React Router 浏览器历史推送和锚点【英文标题】:React Router browserHistory push and anchors 【发布时间】:2018-05-16 18:17:51 【问题描述】:

使用 React Router 4 中的 browserHistory 以编程方式导航到锚点时:

import  withRouter  from 'react-router-dom'
...
props.history.push('#blah')

我可以看到地址栏中的哈希值发生了变化,但页面没有滚动到相关的锚点。我已经用标准&lt;a href="#blah"&gt;Blah&lt;/a&gt; 对其进行了检查,并且效果很好。知道我做错了什么吗?谢谢:)

更新 刚刚检查过,&lt;Link to="#blah"&gt;Blah&lt;/Link&gt; 也不起作用......我假设反应 Links 也使用历史对象工作?

【问题讨论】:

我正在使用浏览器路由器,这就是我谈论浏览器历史的原因。正如您从我上面的帖子中看到的那样,我已经完全尝试了您建议的代码行(this 除外,因为我正在使用功能组件) @Aaqib 不正确。这是完全不相关的问题。推路径工作正常,推哈希不行。 【参考方案1】:

经过一番调查,我决定添加一个函数来处理 componentDidUpdate 生命周期事件:

componentDidUpdate: props => 
  const selected = props.history.location.hash
  if(selected && selected.length > 0) 
    const elem = document.querySelector(selected)
    elem && elem.scrollIntoView()
  

这很好地解决了这个问题:)

【讨论】:

这行得通,我只需要使用querySelector() 而不是getElementById(),因为selected 包含英镑符号#。 getElementById 只需要没有 # 的 ID。 querySelector 工作正常。

以上是关于使用 react router 地址栏变化而页面不跳转问题的主要内容,如果未能解决你的问题,请参考以下文章

React Router 浏览器历史推送和锚点

为啥vue中子路由点击router-link只能刷新一次子页面?

使用 Angular ui-router 设置 URL 查询参数而不改变状态

react路由跳转失效原因

使用 react-router-dom 停止页面中侧边栏的重新渲染

通过在 react-router 的地址栏上输入它的地址直接访问路由器