为什么我的 react-router 链接将我带到页面中间?

Jac*_*ton 3 html javascript reactjs react-router

我的网站上有很多链接,但只有一个可以做到这一点。

而不是通过导航栏将我带到顶部,它只是进入内容的中间。知道为什么会这样吗?

它是一个.map经过 some的页面,它在页面下方JSON呈现div文本元素……如果有关系的话。

这是一些可能相关的代码。

路线

<Route exact path ="/reviews" component={Reviews} />
Run Code Online (Sandbox Code Playgroud)

链接

                <Link to="/reviews">
                <ViewAllBtn>View All</ViewAllBtn>
            </Link>
Run Code Online (Sandbox Code Playgroud)

登陆页面(登陆中间而不是顶部)

        <MotherDiv>
        <NavBar />
        <Prompt>
            <PromptHead>Customer Reviews</PromptHead>
            <PromptBody>Heres what our loyal customers think of Heavenly Details.</PromptBody>
        </Prompt>
        <ReviewsDiv>
            {reviews.map(review =>
                <ReviewDiv key={review.name}>
                    <Name>{review.name}</Name>
                    <Body>{review.body}</Body>
                </ReviewDiv >
            )}
        </ReviewsDiv>
        <Footer />
    </MotherDiv>
Run Code Online (Sandbox Code Playgroud)

Luz*_*uze 11

react-router当 URL 更改而不是硬刷新页面时呈现新组件。这有一个令人讨厌的副作用,它会记住您当前的滚动位置,并且不会在页面更改时自动滚动回页面顶部。

我猜从你的问题的声音,这可能是这里的问题。如果是这样,那么用一个简单的方法来解决这个问题就很容易了higher order component

class ScrollToTop extends Component {
  componentDidUpdate(prevProps) {
    const { location } = this.props;
    if (location.pathname !== prevProps.location.pathname) {
      window.scrollTo(0, 0);
    }
  }

  render() {
    const { children } = this.props;
    return children;
  }
}

export default withRouter(ScrollToTop);
Run Code Online (Sandbox Code Playgroud)

App像这样将这个组件包裹在你的周围:

render(
  <ScrollToTop>
    <App />
  </ScrollToTop>,
  document.getElementById('app'),
);
Run Code Online (Sandbox Code Playgroud)

当路线改变时,您的应用现在应该自动重置它的滚动位置。