标签 - React 共找到结果 1 条

使用vue-router的时候会有路由守卫 afterEach 方便跳转页面后执行跳转到页面顶部:

router.afterEach(function () {
  window.scrollTo(0, 0);
})

但是react-router 却没有这种函数,特别是react-router 4 更是取消了onEnter onUpdate函数.

解决方法:

withRouter可以包装任何自定义组件,将react-router 的 history,location,match 三个对象传入。无需一级级传递react-router 的属性,当需要用的router 属性的时候,将组件包一层withRouter,就可以拿到需要的路由信息

  1. 定义ScrollToTop组件:
import React, { Component } from 'react';
import { withRouter } from "react-router-dom";

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

export default withRouter(ScrollToTop)
  1. 在定义路由处引用该组件:
import ScrollToTop from '../components/ScrollToTop';
export default class Root extends Component {
  render() {
    return (
      <Router>
        <ScrollToTop>
          <Header />
          <Menus />
          {/* 首页 */}
          <Route exact path="/" component={Home} />
          {/* 图文 */}
          <Switch>
            <Route exact path="/one" component={OneList} />
            <Route path="/one/:id" component={OneDetails} />
          </Switch>
        </ScrollToTop>
      </Router>
    )
  }
}

参考地址:

阅读全文