के लिए प्रतिक्रिया रूटर 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
नए मार्ग के घटक का तर्क नहीं कर सकते थे ?