React頁面跳轉要點總結

一、React頁面跳轉有幾種方式

1、使用JS的location.href實現頁面跳轉。

這種方式相當於瀏覽器的超鏈接。直接更改當前頁面的URL地址,跳轉到指定的頁面。但是這種方式對於單頁面應用來說並不適用。

{`window.location.href = 'http://www.example.com'`}

2、使用JS的window.open()方法實現打開新窗口(url, name, features, replace)

window.open()方法可以在新窗口或者標籤頁中打開指定URL的頁面。這個方法支持打開同源和跨域的頁面,並且可以自定義新頁面的名稱、屬性(例如窗口大小、工具欄等)、以及是否取代(replace)當前頁面歷史記錄中的一項。

{`window.open(
  'https://www.example.com',
  '_blank', // 新窗口
  'height=600,width=800,resizable=yes', // 屬性
  true // 替換當前頁面歷史記錄
);`}

3、使用react-router-dom實現頁面間的跳轉。

React-router-dom是React官方提供的一個路由庫,可以實現適用於單頁應用程序的動態路由。該庫中提供了很多用於頁面之間跳轉的API,包括<Link>, , 等組件。

二、React跳轉頁面的方法有哪些

使用react-router-dom實現頁面間跳轉的方式相較於前兩種方式更為靈活和實用。下面介紹幾個常用的API。

三、React頁面跳轉路由

React-router-dom庫提供的、、組件都可以實現頁面跳轉的路由功能。其中,是使用HTML5歷史記錄API來保持UI和URL同步的,適用於現代瀏覽器,則是使用URL中的hash部分來保證同步,適用於所有瀏覽器,則是在內存中跟蹤URL重定向,適用於沒有URL管理需求的測試或非瀏覽器環境。下面以為例。

{`import { BrowserRouter, Route, Link } from 'react-router-dom';

const Home = () => 

Home

; const About = () =>

About

; const App = () => (
  • <Link to="/">Home
  • <Link to="/about">About
);`}

四、React頁面跳轉路由刷新機制

在使用React-router-dom進行頁面跳轉時,需要注意頁面刷新的機制。

以組件為例,如果在部署React應用時,你可能會遇到訪問某個具體URL時和刷新頁面的情況。在服務器上,該URL對應的資源只存在於客戶端瀏覽器上的內存中,因此在刷新頁面或向該URL直接提出HTTP請求時,服務器無法返回對應的資源,結果是會返回404 Not Found錯誤。

為了避免這個問題,可以配置Web服務器以返回index.html文件。如果有開發過SPA應用,這個問題應該會很熟悉,其實解決方法也是類似的。如果你使用的是非常流行的Web服務器,例如Apache/Nginx,只需確保服務器會將每個請求都重定向到index.html即可。

五、React頁面跳轉路由攔截

當我們需要對用戶進行權限控制或者其他攔截時,可以在React-router-dom中使用中間件(middleware)來實現路由攔截。下面以示例代碼說明。

{`import { BrowserRouter, Route, Redirect } from 'react-router-dom';

const isAuthenticated = false; // 假設這裡返回false表示未認證

const PrivateRoute = ({ component: Component, ...rest }) => (
   (
      isAuthenticated
        ? 
        : 
    )}
  />
);

const Home = () => 

Home

; const Login = () =>

Login

; const App = () => ( );`}

六、React頁面跳轉傳值

在React-router-dom中傳遞參數有兩種方式:參數使用URL的querystring或url部分,或者直接通過React組件屬性來進行傳遞。下面以實例代碼進行說明。

{`// 通過URL參數傳遞參數
import { BrowserRouter, Route, Link } from 'react-router-dom';

const Home = () => 

Home

; const User = ({ match }) =>

Hello, {match.params.name} !

; // 參數名用:name表示 const App = () => (
  • <Link to="/">Home
  • <Link to="/user/john">User - John
  • <Link to="/user/bob">User - Bob
); // 通過組件屬性傳遞參數 import { BrowserRouter, Route, Link } from 'react-router-dom'; const Home = () =>

Home

; const User = ({ name }) =>

Hello, {name} !

; // 通過屬性傳遞 const App = () => (
  • <Link to="/">Home
  • <Link to={{ pathname: '/user', state: { name: 'John' } }}>User - John
  • <Link to={{ pathname: '/user', state: { name: 'Bob' } }}>User - Bob
} /> );`}

七、React頁面跳轉傳參

React-router-dom提供了<Link>、、等組件,用於實現頁面間的跳轉。可以通過在這些組件中添加參數進行頁面跳轉和傳參。

{`import { Link } from 'react-router-dom';

const Home = () => 

Home

; const App = () => (

App

  • <Link to={{ pathname: '/about', search: '?sort=name' }}>About(按名稱排序)
  • <Link to={{ pathname: '/about', search: '?sort=date' }}>About(按日期排序)
);`}

八、React頁面跳轉閃屏

React中實現SPA應用常見的辦法是,在頁面渲染完畢之後再顯示整個React應用。這樣做的好處是用戶不會看到未經過React渲染的DOM元素,網站也可以更快地加載。但是這種方法容易導致首次加載的頁面出現“白屏”或“閃屏”的問題。

為了避免這個問題,可以在React-router-dom中使用React Suspense和React.lazy實現組件的懶加載。下面以示例代碼進行說明。

{`import React, { Suspense, lazy } from 'react';
import { BrowserRouter, Route, Link } from 'react-router-dom';

const Home = lazy(() => import('./Home'));
const About = lazy(() => import('./About'));

const App = () => (

  • <Link to="/">Home
  • <Link to="/about">About

<Suspense fallback={Loading...

原創文章,作者:VLEQB,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/332335.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
VLEQB的頭像VLEQB
上一篇 2025-01-21 17:30
下一篇 2025-01-21 17:30

相關推薦

  • @uiw/react-amap介紹

    本文將詳細闡述@uiw/react-amap的使用方法和參數配置,以及如何在React應用中集成高德地圖組件。 一、@uiw/react-amap簡介 @uiw/react-ama…

    編程 2025-04-29
  • 打包後頁面空白的解決方案

    當我們在調試階段時,我們的app可能看起來完美無缺,但當我們進行打包時,在運行app時,我們可能會遇到白屏或空白的問題。在這篇文章中,我們將探討如何解決這種問題。 一、檢查文件路徑…

    編程 2025-04-29
  • 全能編程開發工程師必須掌握的五個要點

    本文將從五個要點展開,詳細介紹全能編程開發工程師應該如何掌握。 一、懂得項目管理 一名優秀的全能編程開發工程師必須具備良好的項目管理能力。項目管理並不是一個單一的技能,它需要掌握多…

    編程 2025-04-28
  • Python操作Web頁面

    本文將從多個方面詳細介紹Python操作Web頁面的技巧、方法和注意事項。 一、安裝必要的庫 在Python中操作Web頁面,需要用到一些第三方庫。 pip install req…

    編程 2025-04-28
  • Webrtc音視頻開發React+Flutter+Go實戰PDF

    本文將從多個方面介紹如何使用React、Flutter和Go來進行Webrtc音視頻開發,並提供相應的代碼示例。 一、Webrtc音視頻開發介紹 Webrtc是Google開發的一…

    編程 2025-04-27
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若服務器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • PHP登錄頁面代碼實現

    本文將從多個方面詳細闡述如何使用PHP編寫一個簡單的登錄頁面。 1. PHP登錄頁面基本架構 在PHP登錄頁面中,需要包含HTML表單,用戶在表單中輸入賬號密碼等信息,提交表單後服…

    編程 2025-04-27
  • React簡書項目

    本文將從以下幾個方面介紹React簡書項目: 項目概述 組件分析 路由配置 Redux狀態管理 項目優化 一、項目概述 React簡書項目是一個類似於博客的Web應用,提供用戶撰寫…

    編程 2025-04-27
  • React-Icons:強大的圖標庫

    一、React-Icons的介紹 React-Icons 是一個可重用的 React 組件集合,構建了一組常見的圖標,可用於任何 React.js 項目。它為所有的圖標提供了友好的…

    編程 2025-04-25
  • 用vuefavicon管理你的頁面icon標籤

    一、什麼是vuefavicon vuefavicon是一種Vue.js插件,用於動態管理網站的favicon圖標。通常情況下,我們會將網站的icon標籤放置在html文檔的head…

    編程 2025-04-25

發表回復

登錄後才能評論