React公用scrollToTop(返回顶部)组件

本文介绍了如何在React中创建一个公用的scrollToTop组件,用于实现页面切换或特定操作后自动返回页面顶部,提升用户体验。通过在根组件引用该组件,并简单说明了组件的扩展性和使用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在web页面要兼容各种设备,部分页面的内容长度在手机端就显得过于冗长。除了给客户提供一个按钮,一键返回顶部。更好的客户体验就是当客户做某种操作的时候,就自动滚动到顶端。这样就能顺畅的进行接下来的操作了。

目前我所接触到需要自动返回顶部的需求分为两种

  • 当客户切换页面时
  • 当客户当前页面进行某些操作或者顶端显示错误信息

总共两个步骤

1.创建一个单独的组件

import { Component } from 'react';
import { withRouter } from 'react-router-dom';
import { ACTION_ONE, ACTION_TWO } from '../actions/actionTypes';

class ScrollToTop extends Component {
  componentDidMount () {
    const store = this.props.store;
    /**
     * @function 匿名函数: 通过store.subscribe监听最新的action,如果类型符合,就执行返回顶部
     *
     * */
    store.subscribe(() => {
      const actionType = store.getState().lastAction.type;
      switch (actionType) {
        case ACTION_ONE:
        case ACTION_TWO:
          window.scrollTo(0, 0);
          break;
        default: break;
      }
    });
  }

  componentDidUpdate (prevProps) {
    /**
     * 当route路径发生变化的时候,执行返回顶部
     * */
    if (this.props.location.pathname !== prevProps.location.pathname) {
      window.scrollTo(0, 0);
    }
  }

  render () {
    return null;
  }
}

export default withRouter(ScrollToTop);
  1. 在根文件上引用这个组件(index.js / app.js)
import React from 'react';
import ReactDOM from 'react-dom';
import {Provider} from 'react-redux';
import configureStore from '../../store/configureStore';
import Reducer from './reducers';
import {Route, Switch, HashRouter as Router, Redirect} from 'react-router-dom';
import Home from './pages/Home';
import View from './pages/View';
import ScrollToTop from './components/ScrollToTop';
import initialState from './initialState';

const store = configureStore(initialState, Reducer);

ReactDOM.render(
<Provider store={store}>
    <Router>
        <div>
            <ScrollToTop store={store} />
            <Switch>
            <Route exact path='/' component={Home} />
            <Route path='/view' component={View} />
            </Switch>
        </div>
    </Router>
</Provider>,
document.getElementById('app')
);

还是很简单吧。把公用方法用一个组件包起来,也便于以后的升级扩展。任何有关返回顶部的操作,只需要把action type添加进去就可以了。

感谢观看,如果有什么疑问,欢迎留言~~ 比心!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值