İçin tepki-yönlendirici v4 : burada kaydırma restorasyon ulaşır bir create-tepki-uygulamasıdır http://router-scroll-top.surge.sh/ .
Bunu başarmak için Routebileşeni dekore edebilir ve yaşam döngüsü yöntemlerinden yararlanabilirsiniz:
import React, { Component } from 'react';
import { Route, withRouter } from 'react-router-dom';
class ScrollToTopRoute extends Component {
componentDidUpdate(prevProps) {
if (this.props.path === this.props.location.pathname && this.props.location.pathname !== prevProps.location.pathname) {
window.scrollTo(0, 0)
}
}
render() {
const { component: Component, ...rest } = this.props;
return <Route {...rest} render={props => (<Component {...props} />)} />;
}
}
export default withRouter(ScrollToTopRoute);
Üzerinde componentDidUpdatekonum yol adının ne zaman değiştiğini kontrol edebilir ve bunu pathpervane ile eşleştirebiliriz ve eğer tatmin edildiyse, pencere kaydırmasını geri yükleyebiliriz.
Bu yaklaşımla ilgili harika olan şey, kaydırmayı geri yükleyen rotalara ve kaydırmayı geri yüklemeyen rotalara sahip olabilmemizdir.
App.jsYukarıdakileri nasıl kullanabileceğinize dair bir örnek:
import React, { Component } from 'react';
import { BrowserRouter as Router, Route, Link } from 'react-router-dom';
import Lorem from 'react-lorem-component';
import ScrollToTopRoute from './ScrollToTopRoute';
import './App.css';
const Home = () => (
<div className="App-page">
<h2>Home</h2>
<Lorem count={12} seed={12} />
</div>
);
const About = () => (
<div className="App-page">
<h2>About</h2>
<Lorem count={30} seed={4} />
</div>
);
const AnotherPage = () => (
<div className="App-page">
<h2>This is just Another Page</h2>
<Lorem count={12} seed={45} />
</div>
);
class App extends Component {
render() {
return (
<Router>
<div className="App">
<div className="App-header">
<ul className="App-nav">
<li><Link to="/">Home</Link></li>
<li><Link to="/about">About</Link></li>
<li><Link to="/another-page">Another Page</Link></li>
</ul>
</div>
<Route exact path="/" component={Home} />
<ScrollToTopRoute path="/about" component={About} />
<ScrollToTopRoute path="/another-page" component={AnotherPage} />
</div>
</Router>
);
}
}
export default App;
Yukarıdaki koddan, dikkat çekilmesi ilginç olan şey, yalnızca gezinirken /aboutveya /another-pageen üste kaydırma işleminin önceden gerçekleştirilmesidir. Ancak devam ederken, /kaydırma geri yüklemesi olmayacak.
Kod tabanının tamamı burada bulunabilir: https://github.com/rizedr/react-router-scroll-top
componentDidMountYeni güzergah bileşeninin mantığını yapamaz mısınız?