首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >react-scroll |点击导航栏链接时如何滚动到特定的目标组件

react-scroll |点击导航栏链接时如何滚动到特定的目标组件
EN

Stack Overflow用户
提问于 2019-02-16 02:52:16
回答 3查看 16.2K关注 0票数 6

我正在使用React制作一个滚动页面,并希望导航到页面的特定部分。在HTML中,我们使用href和锚标签来实现这种交互。

我发现了一个名为react-scroll的React库,但我不知道如何通过NavBar组件中的链接链接不同文件夹中的每个组件。我的NavBar有多个用于滚动到某个部分/组件的链接。任何帮助都将不胜感激!

代码语言:javascript
复制
  import React, { Component } from "react";
  import { Link, animateScroll as scroll } from "react-scroll";
  class Navbar extends Component {

    render() {
      return (
        <nav className="navbar navbar-expand-lg navbar-dark">
          <Link className="navbar-brand" to="/">
            CMD <span>Custom Movie Database</span>
          </Link>
          <button
            className="navbar-toggler"
            type="button"
            data-toggle="collapse"
            data-target="#navbarNav"
            aria-controls="navbarNav"
            aria-expanded="false"
            aria-label="Toggle navigation"
          >
            <span className="navbar-toggler-icon" />
          </button>
          <div className="collapse navbar-collapse" id="navbarNav">
            <ul className="navbar-nav">
              <li className="nav-item ">
                <Link
                  className="nav-link"
                  to="/"
                  spy={true}
                  smooth={true}
                  offset={-70}
                  duration={500}
                >
                  Home
                </Link>
              </li>
              <li className="nav-item">
                <Link
                  className="nav-link"
                  to="/"
                  spy={true}
                  smooth={true}
                  offset={-70}
                  duration={500}
                >
                  Search
                </Link>
              </li>
              <li className="nav-item">
                <Link
                  className="nav-link"
                  to="/"
                  spy={true}
                  smooth={true}
                  offset={-70}
                  duration={500}
                >
                  Category
                </Link>
              </li>
              <li className="nav-item">
                <Link
                  className="nav-link"
                  to="/"
                  spy={true}
                  smooth={true}
                  offset={-70}
                  duration={500}
                >
                  Popular
                </Link>
              </li>
              <li className="nav-item">
                <Link
                  className="nav-link"
                  to="/"
                  spy={true}
                  smooth={true}
                  offset={-70}
                  duration={500}
                >
                  Trailer
                </Link>
              </li>
              <li className="nav-item">
                <Link
                  className="nav-link"
                  to="/"
                  spy={true}
                  smooth={true}
                  offset={-70}
                  duration={500}
                >
                  Article
                </Link>
              </li>
              <li className="nav-item">
                <Link
                  className="nav-link"
                  to="/"
                  spy={true}
                  smooth={true}
                  offset={-70}
                  duration={500}
                >
                  Contact
                </Link>
              </li>
            </ul>
          </div>
        </nav>
      );
    }
  }

  export default Navbar;

这是添加了所有零部件的主零部件

代码语言:javascript
复制
    class Home extends React.Component {
      render() {
        return (
          <React.Fragment>
            <Navbar />
            <Showcase />
            <FormWrapper />
            <CategoryList />
            <MovieGrid />
            <MovieTrailer />
            <ArticleGrid />
            <Footer />
          </React.Fragment>
        );
      }
    }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-02-16 03:22:04

react-scroll是一个很棒的库-让我试着解释一下我是如何理解它的。

每当我需要滚动到某个元素的Link时,我都会导入该链接、定义它并呈现它:

代码语言:javascript
复制
import React, { Component } from 'react'
import Scroll from 'react-scroll'
const ScrollLink = Scroll.ScrollLink

class Navbar extends Component {

render() {
  return (
    <nav>
      <ScrollLink 
        to="example-destination" 
        spy={true} 
        smooth={true} 
        duration={500} 
        className='some-class' 
        activeClass='some-active-class'
      >
        Link Text Goes Here
      </ScrollLink>       
    </nav>
  )
}

export default Navbar;

在一个单独的文件中,我们定义了Link将滚动到的目的地。从react-scroll导入Element让这件事变得非常简单!

代码语言:javascript
复制
import React, { Component } from 'react'
import { Element } from 'react-scroll'

export default function () {
  return (
    <React.Fragment>
    
      <Element id='example-destination' name='example-destination'>
        // wrap your content in the Element from react-scroll
      </Element>

    </React.Fragment>
  )
}

说得通吗?如果我可以进一步扩展,请让我知道!

票数 11
EN

Stack Overflow用户

发布于 2020-02-24 07:13:08

其他替代方案:

在你想去的组件中放一个id:

代码语言:javascript
复制
<div id='some-id'>
</div>

在那之后,从任何地方打电话:

代码语言:javascript
复制
const anchor = document.querySelector('#some-id')
anchor.scrollIntoView({ behavior: 'smooth', block: 'center' })
票数 8
EN

Stack Overflow用户

发布于 2021-06-29 03:53:56

只是建立在迭戈·巴拉诺夫斯基的解决方案上。通过单击要向下滚动到锚点元素的视图,为元素创建onClick事件侦听器。工作得很好。我是一个新手,所以希望它不会违背React的概念。

代码语言:javascript
复制
  <div 
     style={{"cursor":"pointer"}} 
     onClick={() => {
     const anchor = document.querySelector('#reviews-link')
     anchor.scrollIntoView({ behavior: 'smooth', block: 'center' })
    }}
  >
    <Rating
      rating={rating}
      numReviews={numReviews}
    ></Rating>
  </div>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54715462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档