Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 基于锚的React网络导航_Reactjs_Scroll_React Router_Anchor_Single Page Application - Fatal编程技术网

Reactjs 基于锚的React网络导航

Reactjs 基于锚的React网络导航,reactjs,scroll,react-router,anchor,single-page-application,Reactjs,Scroll,React Router,Anchor,Single Page Application,我正在尝试设置一个单页react web应用程序。我的应用程序只有一个页面,所有组件一个接一个地放置,因此,让您只渲染应用程序的一部分的通用react路由器解决方案对我来说不起作用 其目的是只有一个页面(尽可能大),用户可以通过菜单(或类似菜单)在页面上的各个部分之间导航。此外,当有人键入类似http://url.com/#section4,并自动滚动至所需的部分,将菜单上选定的部分标记为活动 另外,就像一个很好的例子,如果URL可以根据页面滚动而改变,那就太棒了 如何实现这一点?您可以使用来自

我正在尝试设置一个单页react web应用程序。我的应用程序只有一个页面,所有组件一个接一个地放置,因此,让您只渲染应用程序的一部分的通用react路由器解决方案对我来说不起作用

其目的是只有一个页面(尽可能大),用户可以通过菜单(或类似菜单)在页面上的各个部分之间导航。此外,当有人键入类似
http://url.com/#section4
,并自动滚动至所需的部分,将菜单上选定的部分标记为活动

另外,就像一个很好的例子,如果URL可以根据页面滚动而改变,那就太棒了

如何实现这一点?

您可以使用来自react router dom包的HashRouter,也可以使用来自相同包的NavLink,如下所示:

<NavLink>  
    to="/foo/#bar"  
    isActive={()=> window.location.pathname + window.location.hash === "/foo/#bar"}  
</NavLink>
<NavHashLink to="#anchor1" scroll={el => this.scroll(el)}>Anchor1</NavHashLink>

  scroll (el) {
    const offset = document.getElementById('element').offsetHeight
    window.scrollTo({ top: el.offsetTop - offset, left: 0, behavior: 'smooth' })
  }

to=“/foo/#bar”
isActive={()=>window.location.pathname+window.location.hash===“/foo/#bar”}
我发现它与React路由器的BrowserRouter配合使用,允许有一个基于锚的导航,还可以自定义滚动功能,您可以设置偏移量或任何想要设置的内容。大概是这样的:

<NavLink>  
    to="/foo/#bar"  
    isActive={()=> window.location.pathname + window.location.hash === "/foo/#bar"}  
</NavLink>
<NavHashLink to="#anchor1" scroll={el => this.scroll(el)}>Anchor1</NavHashLink>

  scroll (el) {
    const offset = document.getElementById('element').offsetHeight
    window.scrollTo({ top: el.offsetTop - offset, left: 0, behavior: 'smooth' })
  }
this.scroll(el)}>Anchor1
卷轴(el){
常量偏移量=document.getElementById('element')。偏移量
scrollTo({top:el.offsetTop-offset,left:0,行为:'smooth'})
}