1. ホーム
  2. scroll

[解決済み】react.jsでレンダリング後にページの先頭にスクロールする。

2022-04-01 09:26:59

質問

私は問題があり、それを解決する方法を思いつきません。 私のリアクトコンポーネントでは、データの長いリストといくつかのリンクを下部に表示しています。 このリンクのいずれかをクリックした後、私はリンクの新しいコレクションでリストを埋めるので、一番上までスクロールする必要があります。

問題は、どうやって一番上までスクロールするかです。 新しいコレクションがレンダリングされましたか?

'use strict';

// url of this component is #/:checklistId/:sectionId

var React = require('react'),
  Router = require('react-router'),
  sectionStore = require('./../stores/checklist-section-store');


function updateStateFromProps() {
  var self = this;
  sectionStore.getChecklistSectionContent({
    checklistId: this.getParams().checklistId,
    sectionId: this.getParams().sectionId
  }).then(function (section) {
    self.setState({
      section,
      componentReady: true
    });
  });

    this.setState({componentReady: false});
 }

var Checklist = React.createClass({
  mixins: [Router.State],

  componentWillMount: function () {
    updateStateFromProps.call(this);
  },

  componentWillReceiveProps(){
    updateStateFromProps.call(this);
   },

render: function () {
  if (this.state.componentReady) {
    return(
      <section className='checklist-section'>
        <header className='section-header'>{ this.state.section.name }   </header>
        <Steps steps={ this.state.section.steps }/>
        <a href=`#/${this.getParams().checklistId}/${this.state.section.nextSection.Id}`>
          Next Section
        </a>
      </section>
    );
    } else {...}
  }
});

module.exports = Checklist;

解決方法は?

オリジナルの解決策は、非常に初期のバージョンで提供されたものなので 反応 以下は、そのアップデートです。

constructor(props) {
    super(props)
    this.myRef = React.createRef()   // Create a ref object 
}

componentDidMount() {
  this.myRef.current.scrollTo(0, 0);
}

render() {
    return <div ref={this.myRef}></div> 
}   // attach the ref property to a dom element