首頁 >web前端 >js教程 >如何在不修改渲染函數的情況下以程式設計方式在 React Router 中導航?

如何在不修改渲染函數的情況下以程式設計方式在 React Router 中導航?

Susan Sarandon
Susan Sarandon原創
2024-12-05 14:27:141044瀏覽

How to Programmatically Navigate in React Router without Modifying the Render Function?

使用React-Router 以程式設計方式導航

挑戰:

在你的React 應用程式中,你想若要以程式設計方式導覽至根據使用者登入狀態不同的路線。您不確定如何在不改變渲染函數的情況下實現此目的。

React-Router v4 的解決方案:

使用歷史物件:

用withRouter 包裝你的組件並利用props 中的History.push 方法。當您的元件接受路由屬性或未直接連結到路由器時,此方法非常有用。

import { withRouter } from 'react-router';

class App extends React.Component {
...
componentDidMount() {
// Check user login status
if (isLoggedIn) {
// Redirect to home route
this.props.history.push('/home');
}
}
render() {
// Render login component
return <Login />;
}
}

export default withRouter(App);

使用重定向:

對於更簡單的場景,您可以使用 Redirect。

import { withRouter } from 'react-router';

class App extends React.Component {
...
render() {
// If user is logged in, redirect to home route
if (isLoggedIn) {
return <Redirect to="/home" />;
}
// Render login component
return <Login />;
}
}

React-Router 的解決方案v2/v3:

使用路由器上下文:

使用路由器上下文:
import React from 'react';

class App extends React.Component {
...
render() {
// Check user login status
if (isLoggedIn) {
// Change route using router context
this.context.router.push('/home');
}
// Render login component
return <Login />;
}
}

App.contextTypes = {
router: React.PropTypes.object.isRequired
};
export default App;

包裝您的🎜>包裝您的🎜>包裝您的🎜>包裝您的🎜>包裝您的🎜>包裝您的🎜>包裝您的🎜>包裝您的🎜>包裝您的🎜>包裝您的🎜>組件並存取路由器上下文以動態變更路由。

使用瀏覽器歷史記錄:
import { browserHistory } from 'react-router';

// Redirect to specific path
browserHistory.push('/some/path');
直接存取瀏覽器歷史記錄也可以觸發導覽。

以上是如何在不修改渲染函數的情況下以程式設計方式在 React Router 中導航?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn