के लिए प्रतिक्रिया रूटर v4 :, यहाँ एक बनाने प्रतिक्रिया एप्लिकेशन के अंतर्गत है कि पुस्तक बहाली को प्राप्त होता है http://router-scroll-top.surge.sh/ ।
इसे प्राप्त करने के लिए आप Routeघटक बना सकते हैं और जीवन चक्र विधियों का लाभ उठा सकते हैं :
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);
पर componentDidUpdateहम जांच कर सकते हैं जब स्थान पथ नाम परिवर्तन और से इसका मिलान pathअगर उन संतुष्ट प्रोप और,, खिड़की स्क्रॉल बहाल।
इस दृष्टिकोण के बारे में क्या अच्छा है, यह है कि हमारे पास स्क्रॉल को पुनर्स्थापित करने वाले मार्ग हो सकते हैं और वे रूट जो स्क्रॉल को पुनर्स्थापित नहीं करते हैं।
यहाँ एक App.jsउदाहरण दिया गया है कि आप उपरोक्त का उपयोग कैसे कर सकते हैं:
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;
ऊपर दिए गए कोड से, जो इंगित करना दिलचस्प है, वह यह है कि केवल नेविगेट करने /aboutया /another-pageशीर्ष कार्रवाई करने के लिए स्क्रॉल करने से पहले ही विकृत हो जाएगा। हालाँकि जब /कोई स्क्रॉल रिस्टोर नहीं होगा तब होगा।
पूरा कोडबेस यहां पाया जा सकता है: https://github.com/rizedr/react-router-scroll-top
componentDidMountनए मार्ग के घटक का तर्क नहीं कर सकते थे ?