React-router-dom v6


1.BrowserRouter

要放在最頂層,即所有組件的最外面;可以定義別名

 

2.Routes 

包括相對路由和鏈接、自動路由排名、嵌套路由和布局等功能

  

3.路由跳轉

"/"開頭為絕對路由,否則為相對路由

 

4.Route 

負責渲染React組件的UI

1)path屬性 

始終與應用程序當前的URL匹配

2)element屬性 

當遇到當前URL時,會告訴Route組件渲染哪個React組件

 

Demo中的情況:

<Route path="/" element={<Father />}>

  

5.Link

 添加一個導航欄 相當於HTML中的a標簽 只能在Router內部使用

 

Demo中的情況:

<Link to="login" style={{ padding: 10 }}>

 

6.編程式跳轉(useNavigate)

使用useNavigate鈎子函數生成navigate對象,可以通過js代碼完成路由跳轉

 

Demo中的情況:

const navigate = useNavigate();

<button onClick={() => navigate('/')}>點擊跳轉回首頁</button>

 

7. 路由傳參的三種方式

1)動態路由參數(讀取URL參數)  關鍵字:Params

在Route組件中的path屬性中定義路徑參數;在組件內通過useParams hook訪問路徑參數

 

Demo中的情況:

路由中:

<Route path="/user" element={<User />}></Route>

<Route path="/user/detail/:id" element={<Detail />}></Route>

detail文件中:

const params = useParams();

<h3>此時是用戶{params.id}</h3>

user文件中:

<Link to="detail/1"></Link>

 

通常用在組件呈現時獲取數據:

function Invoice() {

  let { invoiceId } = useParams();

  let invoice = useFakeFetch(`/api/invoices/${invoiceId}`);

  return invoice ? (

    <div>

      <h1>{invoice.customerName}</h1>

    </div>

  ) : (

    <Loading />

  );

}

 

2)search參數 

查詢參數不需要在路由中定義

使用useSearchParams hook來訪問查詢參數,用法與useState類似,會返回當前對象和更改他的方法

更改searchParams時,必須傳入所有查詢參數,否則會覆蓋已有參數

 

//路由鏈接(攜帶參數):

 <Link className="nav" to={`/b/child2?age=20&name=zhangsan`}>Child2</Link>

//接收參數方法:

import { useSearchParams } from "react-router-dom";

const [searchParams, setSearchParams] = useSearchParams();

console.log( searchParams.get(“age”)); // 20

 

3)state參數

//通過Link的state屬性傳遞參數

 <Link

     className="nav"

     to={`/b/child2`}

     state={{ id: 999, name: "i love merlin" }} //要傳遞的參數寫在此處

 >

    Child2

</Link>

//接收參數:

import { useLocation } from "react-router-dom";

const { state } = useLocation();

//state參數 => {id: 999, name: "i love merlin"}

//刷新也可以保留參數

 

8.嵌套路由

通過嵌套的書寫Route組件 實現對嵌套路由的定義

在父組件中使用Outlet來顯示匹配到的子組件,目的是作為子路由的出口

 

Demo中的情況:

父組件:<Outlet />

路由:嵌套路由的形式

<Route path="home" element={<Home />}>

       <Route path="homeSpan" element={<HomeSpan />}></Route>

       <Route path="HomeDiv" element={<HomeDiv />}></Route>

</Route>

 

 

9.默認路由

在嵌套路由中,如果URL僅匹配了父級URL,則Outlet中會顯示帶有index屬性的路由

 

Demo中的情況:

<Route index element={<Default />}></Route>

 

 

10.全匹配路由

path值取“*”時,可以匹配任何(非空)路徑,但他的優先級是最低的,一般用來設置404界面

 

Demo中的情況:

<Route path="*" element={<NotFound />}></Route>

 

11.多組路由

通常一個應用中只有一個Routes組件,但是根據實際需求也可以定義多個路由出口(比如側邊欄和主頁面都要隨URL變化)

<Router>

    <SideBar>

        <Routes>

            <Route></Route>

        </Routes>

    </SideBar>

    <Main>

        <Routes>

            <Route></Route>

        </Routes>

    </Main>

</Router>

 

12.重定向(Navigate)

當前在a,想重定向到b,可以通過Navigate組件進行重定向到其他路徑

import { Navigate } from 'react-router-dom';

function A(){

    return (

        <Navigate to="/b" />

    )

}

 

13.后裔路由(Descendant)

在父路由路徑的末尾放置一個 *,可以避免當 URL 長於父路由的路徑時,父路由與 URL 不匹配,影響后代路由的顯示

官網示例:

function App() {

  return (

    <Routes>

      <Route path="/" element={<Home />} />

      <Route path="dashboard/*" element={<Dashboard />} />

    </Routes>

  );

}

 

function Dashboard() {

  return (

    <div>

      <p>Look, more routes!</p>

      <Routes>

        <Route path="/" element={<DashboardGraphs />} />

        <Route path="invoices" element={<InvoiceList />} />

      </Routes>

    </div>

  );

}

Demo地址:https://stackblitz.com/edit/react-xlsspr?file=src%2FPages%2FUser.js


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM