สำหรับreact-router v4นี่คือแอป create-react-ที่สามารถกู้คืนการเลื่อนได้: http://router-scroll-top.surge.sh/ 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
องค์ประกอบของเส้นทางใหม่ได้หรือไม่?