您的当前位置: 首页 React 路由

React 路由

React 路由通常使用 react-router 库来实现,它是一个功能强大的库,用于在 React 应用程序中实现客户端路由。以下是关于如何在 React 中使用 React Router 的详细说明:

安装 React Router

首先,你需要安装 react-router-dom 包,这是用于在浏览器环境中实现路由的包。

npm install react-router-dom

基本用法

以下是使用 React Router 设置基本路由的步骤和示例代码。

1. 创建基础路由组件

首先,创建一些简单的组件,它们将被路由渲染。

实例

import React from 'react' ;

const Home = ( ) => {
  return <h2 >Home </h2 >;
} ;

export default Home ;

// About.js
import React from 'react' ;

const About = ( ) => {
  return <h2 >About </h2 >;
} ;

export default About ;

// Contact.js
import React from 'react' ;

const Contact = ( ) => {
  return <h2 >Contact </h2 >;
} ;

export default Contact ;

2. 设置路由

在你的主应用组件中,使用 react-router-dom 的组件来设置路由。

实例

import React from 'react' ;
import ReactDOM from 'react-dom/client' ;
import {
  BrowserRouter as Router ,
  Routes ,
  Route ,
  Link
} from 'react-router-dom' ;

import Home from './Home' ;
import About from './About' ;
import Contact from './Contact' ;

const App = ( ) => {
  return (
    <Router >
      <div >
        <nav >
          <ul >
            <li >
              <Link to = "/" >Home </Link >
            </li >
            <li >
              <Link to = "/about" >About </Link >
            </li >
            <li >
              <Link to = "/contact" >Contact </Link >
            </li >
          </ul >
        </nav >
        <Routes >
          <Route path = "/" element = { <Home /> } />
          <Route path = "/about" element = { <About /> } />
          <Route path = "/contact" element = { <Contact /> } />
        </Routes >
      </div >
    </Router >
  ) ;
} ;

const root = ReactDOM. createRoot (document. getElementById ( 'root' ) ) ;
root. render ( <App /> ) ;

嵌套路由

React Router 允许你创建嵌套路由,这样可以在一个组件内渲染更多的路由。

实例

// Dashboard.js
import React from 'react' ;
import { Link , Outlet } from 'react-router-dom' ;

const Dashboard = ( ) => {
  return (
    <div >
      <h2 >Dashboard </h2 >
      <nav >
        <ul >
          <li >
            <Link to = "profile" >Profile </Link >
          </li >
          <li >
            <Link to = "settings" >Settings </Link >
          </li >
        </ul >
      </nav >
      <Outlet />
    </div >
  ) ;
} ;

export default Dashboard ;

实例

// Profile.js
import React from 'react' ;

const Profile = ( ) => {
  return <h2 >Profile </h2 >;
} ;

export default Profile ;

实例

// Settings.js
import React from 'react' ;

const Settings = ( ) => {
  return <h2 >Settings </h2 >;
} ;

export default Settings ;

在主应用组件中设置嵌套路由:

实例

import React from 'react' ;
import ReactDOM from 'react-dom/client' ;
import {
  BrowserRouter as Router ,
  Routes ,
  Route ,
  Link
} from 'react-router-dom' ;

import Home from './Home' ;
import About from './About' ;
import Contact from './Contact' ;
import Dashboard from './Dashboard' ;
import Profile from './Profile' ;
import Settings from './Settings' ;

const App = ( ) => {
  return (
    <Router >
      <div >
        <nav >
          <ul >
            <li >
              <Link to = "/" >Home </Link >
            </li >
            <li >
              <Link to = "/about" >About </Link >
            </li >
            <li >
              <Link to = "/contact" >Contact </Link >
            </li >
            <li >
              <Link to = "/dashboard" >Dashboard </Link >
            </li >
          </ul >
        </nav >
        <Routes >
          <Route path = "/" element = { <Home /> } />
          <Route path = "/about" element = { <About /> } />
          <Route path = "/contact" element = { <Contact /> } />
          <Route path = "/dashboard" element = { <Dashboard /> } >
            <Route path = "profile" element = { <Profile /> } />
            <Route path = "settings" element = { <Settings /> } />
          </Route >
        </Routes >
      </div >
    </Router >
  ) ;
} ;

const root = ReactDOM. createRoot (document. getElementById ( 'root' ) ) ;
root. render ( <App /> ) ;

动态路由

可以在路径中包含动态参数。

实例

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

const User = ( ) => {
  const { userId } = useParams ( ) ;
  return <h2 >User ID : {userId } </h2 >;
} ;

export default User ;

在主应用组件中设置动态路由:

实例

import React from 'react' ;
import ReactDOM from 'react-dom/client' ;
import {
  BrowserRouter as Router ,
  Routes ,
  Route ,
  Link
} from 'react-router-dom' ;

import Home from './Home' ;
import About from './About' ;
import Contact from './Contact' ;
import Dashboard from './Dashboard' ;
import Profile from './Profile' ;
import Settings from './Settings' ;
import User from './User' ;

const App = ( ) => {
  return (
    <Router >
      <div >
        <nav >
          <ul >
            <li >
              <Link to = "/" >Home </Link >
            </li >
            <li >
              <Link to = "/about" >About </Link >
            </li >
            <li >
              <Link to = "/contact" >Contact </Link >
            </li >
            <li >
              <Link to = "/dashboard" >Dashboard </Link >
            </li >
            <li >
              <Link to = "/user/1" >User 1 </Link >
            </li >
            <li >
              <Link to = "/user/2" >User 2 </Link >
            </li >
          </ul >
        </nav >
        <Routes >
          <Route path = "/" element = { <Home /> } />
          <Route path = "/about" element = { <About /> } />
          <Route path = "/contact" element = { <Contact /> } />
          <Route path = "/dashboard" element = { <Dashboard /> } >
            <Route path = "profile" element = { <Profile /> } />
            <Route path = "settings" element = { <Settings /> } />
          </Route >
          <Route path = "/user/:userId" element = { <User /> } />
        </Routes >
      </div >
    </Router >
  ) ;
} ;

const root = ReactDOM. createRoot (document. getElementById ( 'root' ) ) ;
root. render ( <App /> ) ;

404 页面

可以使用 React Router 提供的 Navigate 组件来实现 404 页面重定向。

实例

import React from 'react' ;
import ReactDOM from 'react-dom/client' ;
import {
  BrowserRouter as Router ,
  Routes ,
  Route ,
  Link ,
  Navigate
} from 'react-router-dom' ;

import Home from './Home' ;
import About from './About' ;
import Contact from './Contact' ;
import Dashboard from './Dashboard' ;
import Profile from './Profile' ;
import Settings from './Settings' ;
import User from './User' ;

const NotFound = ( ) => {
  return <h2 > 404 Page Not Found </h2 >;
} ;

const App = ( ) => {
  return (
    <Router >
      <div >
        <nav >
          <ul >
            <li >
              <Link to = "/" >Home </Link >
            </li >
            <li >
              <Link to = "/about" >About </Link >
            </li >
            <li >
              <Link to = "/contact" >Contact </Link >
            </li >
            <li >
              <Link to = "/dashboard" >Dashboard </Link >
            </li >
            <li >
              <Link to = "/user/1" >User 1 </Link >
            </li >
            <li >
              <Link to = "/user/2" >User 2 </Link >
            </li >
          </ul >
        </nav >
        <Routes >
          <Route path = "/" element = { <Home /> } />
          <Route path = "/about" element = { <About /> } />
          <Route path = "/contact" element = { <Contact /> } />
          <Route path = "/dashboard" element = { <Dashboard /> } >
            <Route path = "profile" element = { <Profile /> } />
            <Route path = "settings" element = { <Settings /> } />
          </Route >
          <Route path = "/user/:userId" element = { <User /> } />
          <Route path = "*" element = { <Navigate to = "/" replace /> } />
        </Routes >
      </div >
    </Router >
  ) ;
} ;

const root = ReactDOM. createRoot (document. getElementById ( 'root' ) ) ;
root. render ( <App /> ) ;

小结

通过使用 React Router,你可以轻松地在 React 应用中实现路由功能,包括基本路由、嵌套路由、动态路由以及 404 页面等。通过这种方式,你可以创建一个功能强大且用户友好的单页应用程序 (SPA)。