İç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 Route
bileş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 componentDidUpdate
konum yol adının ne zaman değiştiğini kontrol edebilir ve bunu path
pervane 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.js
Yukarı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 /about
veya /another-page
en ü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
componentDidMount
Yeni güzergah bileşeninin mantığını yapamaz mısınız?