React Router v6 路由配置,嵌套路由

本文对比介绍了如何在React应用中使用<Routes>和useRoutes接口配置React Router,包括基本路径、嵌套路由和组件渲染。通过实例演示了如何在index.js中灵活运用这两种方式来组织和管理路由。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

React Router 提供了两个接口来配置路由

  • <Routes>:通过在jsx中组件方式
  • useRouters通过对象配置方式

 例:在index.js里通过<Routes>配置

import React from 'react';
import ReactDOM from 'react-dom';
import { store } from './app/store';
import { Provider } from 'react-redux';
import { BrowserRouter, Routes, Route } from 'react-router-dom';
import App from './App';
import { PostsList  } from './features/posts/PostsList';
import { SinglePostPage } from './features/posts/SinglePostPage';
import * as serviceWorker from './serviceWorker';
import './index.css';

ReactDOM.render(
  <React.StrictMode>
    <Provider store={store}>
      <BrowserRouter>
        <Routes>
          <Route path='/' element={<App />} />
           {/* 嵌套路由 */}
          <Route path="/postList" element={<PostsList />}>
            <Route index element={<div>我是index默认子路由</div>} />
            <Route path=":id" element={<div>我是子路由元素</div>} />
          </Route>
          <Route path="/singlePostPage/:postId" element={<SinglePostPage />} />
          <Route path="*" element={<App />} />
        </Routes>
      </BrowserRouter>
    </Provider>
  </React.StrictMode>,
  document.getElementById('root')
);
serviceWorker.unregister();

例:在index.js里通过useRouters配置,此处配置可提出至单独文件

import React from 'react';
import ReactDOM from 'react-dom';
import { store } from './app/store';
import { Provider } from 'react-redux';
import { BrowserRouter, useRoutes } from 'react-router-dom';
import App from './App';
import { PostsList  } from './features/posts/PostsList';
import { SinglePostPage } from './features/posts/SinglePostPage';
import * as serviceWorker from './serviceWorker';
import './index.css';

const GetRoutes = () => {
  const routes = useRoutes([
    { path: '/', element: <App /> },
    { 
      path: '/postList',
      element: <PostsList />,
      children: [
        { path: '/postList/:id', element: <div>我是子路由元素</div> },
        { path: '*', element: <div>404</div>}
      ],
    },
    { path: '/singlePostPage/:postId', element: <SinglePostPage /> },
    { path: '*', element: <div>404</div>}
  ])
  return routes;
}
ReactDOM.render(
  <React.StrictMode>
    <Provider store={store}>
      <BrowserRouter>
        <GetRoutes />
      </BrowserRouter>
    </Provider>
  </React.StrictMode>,
  document.getElementById('root')
);
serviceWorker.unregister();

注意嵌套路由需要在父路由使用Outlet呈现其子路由元素

import React from 'react';
import { useSelector } from 'react-redux';
import { Link, Outlet } from 'react-router-dom'

export const PostsList = () => {
  const posts = useSelector(state => state.posts);
  const renderedPosts = posts.map(post => (
    <div key={post.id}>
      <h3>{post.title}</h3>
      <p>{post.content.substring(0,100)}</p>
      <Link to={`/singlePostPage/${post.id}`}> 查看详情</Link>
    </div>
  ))
  return (
    <section>
      <h2>posts</h2>
      {renderedPosts}
      {/* 子路由渲染位置 */}
      <Outlet />
    </section>
  )
}

### React Router v6路由配置方法 React Router 是用于管理 React 应用程序中的导航和路由的流行库。在版本 6 中,React Router 做了一些重要的更改,这些更改影响了路由的定义方式以及组件之间的交互。 #### 主要变化 React Router v6 引入了一种新的声明式 API 来处理路由配置[^1]。它移除了 `component` 和 `render` 属性的支持,取而代之的是使用 `element` 属性来指定渲染的内容。这使得开发者可以直接传递 JSX 元素给 `element` 属性。 #### 配置示例 以下是 React Router v6 的基本路由配置示例: ```javascript import React from 'react'; import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'; function App() { return ( <Router> <Routes> <Route path="/" element={<Home />} /> <Route path="/about" element={<About />} /> <Route path="/contact" element={<Contact />} /> </Routes> </Router> ); } function Home() { return <h2>Home</h2>; } function About() { return <h2>About</h2>; } function Contact() { return <h2>Contact</h2>; } ``` 在这个例子中,我们导入了 `BrowserRouter`, `Routes`, 和 `Route` 组件,并通过设置不同的路径 (`path`) 将它们与相应的页面组件关联起来。注意这里使用的 `<Routes>` 替换了旧版中的 `<Switch>`。 #### 使用嵌套路由 React Router v6 还支持更直观的嵌套结构表示法。下面是如何实现子路由的一个简单实例: ```javascript <Routes> <Route path="users" element={<Users />}> {/* Index route */} <Route index element={<UserList />} /> {/* Nested routes */} <Route path=":userId" element={<UserProfile />} /> </Route> </Routes> ``` 在这里,“users”是一个父级路由,`:userId` 则代表动态参数部分,允许访问特定用户的资料页。 #### 导航链接 为了创建可点击的导航项,在 React Router v6 中可以继续使用 `Link` 或者新增加的 `NavLink` 组件来进行页面间的跳转操作。 ```javascript import { Link, NavLink } from 'react-router-dom'; <Link to="/">Go to home</Link> <NavLink activeClassName="selected" to="/about">Learn more about us</NavLink> ``` 上述代码片段展示了两种不同类型的超链接标签——普通的 `Link` 和带有活动状态样式的 `NavLink`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值