在React Router V4中,一个链接如何链接到一个片段标识符?

克里斯 :

给定非常简单的页面(假设已导入React和react-router @ 4):

// Current location: example.com/about
<Link to="/about/#the-team">See the team</Link>
// ... loads of content ... //
<a id="the-team"></a>

我希望上面的内容在单击“查看团队”后会向下滚动到ID标记的团队锚点。网址正确更新为:example.com/about#the-team,但不会向下滚动。

我已经尝试过其他选择,例如,<a name="the-team"></a>但我认为这不再是规范(也不起作用)。

github上有很多针对react-router @ v2的变通方法,但是它们依赖于BrowserRouter上存在的更新回调,而该回调在v4中不再存在。

保罗·S:

给定一个<ScrollIntoView>使用该元素的id滚动到的组件:

class ScrollIntoView extends React.Component {

  componentDidMount() {
    this.scroll()
  }

  componentDidUpdate() {
    this.scroll()
  }

  scroll() {
    const { id } = this.props
    if (!id) {
      return
    }
    const element = document.querySelector(id)
    if (element) {
      element.scrollIntoView()
    }
  }

  render() {
    return this.props.children
  }
}

您可以在其中包装视图组件的内容:

const About = (props) => (
  <ScrollIntoView id={props.location.hash}>
    // ...
  </ScrollIntoView>
)

或者,您可以创建一个匹配包装器:

const MatchWithHash = ({ component:Component, ...props }) => (
  <Match {...props} render={(props) => (
    <ScrollIntoView id={props.location.hash}>
      <Component {...props} />
    </ScrollIntoView>
  )} />
)

用法是:

<MatchWithHash pattern='/about' component={About} />

一个完全充实的解决方案可能需要考虑边缘情况,但是我对上述情况进行了快速测试,并且似乎可行。

编辑:

现在可以通过npm使用此组件。GitHub:https : //github.com/pshrmn/rrc

npm install --save rrc

import { ScrollIntoView } from 'rrc'

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

React-Router外部链接

React-Router只有一个孩子

与React-Router的活动链接?

react-router vs react-router-dom,何时使用一个或另一个?

使用链接测试React Router

如何调试React Router?

React Router深层链接

React-Router链接,如何触发来自另一个组件的链接上的点击事件

如何在React Router中链接到嵌套路由

如何在React Router v4中传递道具?

React Router v4中的indexLink

React-Router:使用链接将道具从一个组件传递到另一组件

重定向到登录时的上一个路径-React Router v4

在React Router V4中突出显示默认链接

React Router 4:如何在Route的渲染方法中等待一个承诺解决?

使用React Router v4指定一个可选的路径名

使用react-day-picker和React Router V4链接到其他页面

如何创建可在react-router-dom v4中返回的链接

react-router v4中的自定义活动链接

React Router V4,在路由的第一个父节点下不匹配任何内容

使用React Router仅显示一个组件

设置React Router链接的样式

如何通过React Router链接将状态数据传递到另一个网页?

React Router HashRouter 插入一个 ? 在 url 之前 #

如何通过 react-native-router -flux 在 react-native 中更新回(上一个)屏幕

想要在下一个选项卡上同时打开一个 URL 并导航到一个路由:React+ React Router V4+ semantic-ui-react

我有一个关于 react-router v4 的问题,我不明白

React router dom 渲染一个空白页面

如何最好地处理 React / Router 中两个 url(1 个子 url)使用的一个组件的状态