React 中的路由跳轉及傳參

一、安裝與基礎配置

  1. 1. 安裝 React Router v6

    npm install react-router-dom
  2. 2. 配置路由

    import { BrowserRouter, Routes, Route } from 'react-router-dom';
        
    function App() {
      return (
        <BrowserRouter>
          <Routes>
            <Route path="/" element={<Home />} />
            <Route path="/user/:id" element={<User />} />
            <Route path="/search" element={<SearchPage />} />
          </Routes>
        </BrowserRouter>
      );
    }

二、路由跳轉方式

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

function Home() {
  return (
    <div>
      <Link to="/user/123">跳轉到用戶123</Link>
      <Link to="/search?>搜索John</Link>
    </div>
  );
}

2. 編程式導航:useNavigate

  1. 1. 參數傳遞規範

options常用的配置選項:

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

function Home() {
  const navigate = useNavigate();

  return (
    <button onClick={() => navigate('/user/456')}>
      跳轉到用戶456
    </button>
  );
}

三、參數傳遞方式

1. URL 參數(動態路由)

2. 查詢參數(Query Parameters)

3. 狀態參數(State)


四、關鍵注意事項

  1. 1. 動態路由參數需在路由配置中定義(如path="/user/:id")。

  2. 2. 查詢參數不會在路由配置中顯式聲明,通過?key=value傳遞。

  3. 3. State 參數不會暴露在 URL 中,適合敏感數據,但頁面刷新後會丟失。

  4. 4. 處理未定義參數:使用可選鏈操作符(?.)或默認值避免錯誤。

    const { id } = useParams() || {};
    const name = searchParams.get('name') || '未知';
    const stateData = location.state?.data || {};

五、完整示例

// App.js
import { BrowserRouter, Routes, Route } from'react-router-dom';
importHomefrom'./Home';
importUserfrom'./User';
importSearchPagefrom'./SearchPage';
importDetailsfrom'./Details';

functionApp() {
return (
    <BrowserRouter>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/user/:id" element={<User />} />
        <Route path="/search" element={<SearchPage />} />
        <Route path="/details" element={<Details />} />
      </Routes>
    </BrowserRouter>
  );
}

// Home.js
import { Link, useNavigate } from'react-router-dom';

functionHome() {
const navigate = useNavigate();

return (
    <div>
      <Link to="/user/123">用戶123(URL參數)</Link>
      <button onClick={() => navigate('/search?name=john')}>
        搜索John(查詢參數)
      </button>
      <button onClick={() => navigate('/details', { state: { data: '祕密信息' } })}>
        查看詳情(State參數)
      </button>
    </div>
  );
}

// User.js
import { useParams } from'react-router-dom';

functionUser() {
const { id } = useParams();
return<div>用戶ID: {id}</div>;
}

// SearchPage.js
import { useSearchParams } from'react-router-dom';

functionSearchPage() {
const [searchParams] = useSearchParams();
const name = searchParams.get('name');
return<div>搜索名稱: {name}</div>;
}

// Details.js
import { useLocation } from'react-router-dom';

functionDetails() {
const location = useLocation();
const data = location.state?.data;
return<div>接收到的State數據: {data}</div>;
}

六、總結

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/sMfV49Cgy6gMu1oL2QRsqw