React Router 入门教程:构建一个简单的记账应用

React Router 入门教程:构建一个简单的记账应用

react-router react-router 项目地址: https://gitcode.com/gh_mirrors/react/react-router

前言

React Router 是 React 生态中最流行的路由解决方案之一,它允许开发者构建单页应用(SPA)时实现客户端路由功能。本教程将带你从零开始,使用 React Router 构建一个简单的记账应用,涵盖路由配置、导航、嵌套路由等核心概念。

环境准备

快速开始(推荐)

对于初学者,建议使用在线开发环境来跟随本教程。这种方式无需配置本地开发环境,可以直接在浏览器中编写代码。

本地开发环境

如果你更喜欢在本地开发,可以使用以下任一方式创建 React 项目:

# 使用 Create React App
npx create-react-app router-tutorial

# 或使用 Vite
npm init vite@latest router-tutorial --template react

然后安装 React Router 依赖:

cd router-tutorial
npm install react-router-dom@6

基础路由配置

连接浏览器 URL

首先,我们需要将应用与浏览器 URL 连接起来。修改入口文件(通常是 main.jsxindex.js):

import * as ReactDOM from "react-dom/client";
import { BrowserRouter } from "react-router-dom";
import App from "./App";

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

BrowserRouter 组件会监听 URL 变化并保持 UI 与 URL 同步。

创建导航链接

App.js 中添加一些导航链接:

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

export default function App() {
  return (
    <div>
      <h1>记账应用</h1>
      <nav>
        <Link to="/invoices">发票</Link>
        <Link to="/expenses">支出</Link>
      </nav>
    </div>
  );
}

现在点击链接会改变 URL,但还没有内容显示,因为我们还没有配置路由。

配置路由

创建路由组件

首先创建两个页面组件:

  • src/routes/invoices.jsx - 发票列表页
  • src/routes/expenses.jsx - 支出列表页
// invoices.jsx
export default function Invoices() {
  return <h2>发票列表</h2>;
}

// expenses.jsx
export default function Expenses() {
  return <h2>支出列表</h2>;
}

定义路由配置

在入口文件中配置路由:

import {
  BrowserRouter,
  Routes,
  Route,
} from "react-router-dom";
import App from "./App";
import Expenses from "./routes/expenses";
import Invoices from "./routes/invoices";

root.render(
  <BrowserRouter>
    <Routes>
      <Route path="/" element={<App />}>
        <Route path="expenses" element={<Expenses />} />
        <Route path="invoices" element={<Invoices />} />
      </Route>
    </Routes>
  </BrowserRouter>
);

注意我们将 /expenses/invoices 路由嵌套在 / 路由下,这为嵌套布局奠定了基础。

添加 Outlet 组件

修改 App.js 添加 Outlet 组件:

import { Outlet, Link } from "react-router-dom";

export default function App() {
  return (
    <div>
      {/* 导航和标题 */}
      <Outlet />
    </div>
  );
}

Outlet 是子路由内容的渲染位置,这样父路由的布局(如导航栏)会保持不变,只有子路由部分内容会变化。

高级路由功能

动态路由参数

让我们为发票添加详情页。首先创建发票数据:

// data.js
export const invoices = [
  { id: 1, name: "项目A", amount: "$1000" },
  { id: 2, name: "项目B", amount: "$2000" }
];

然后创建发票详情组件:

// routes/invoice.jsx
import { useParams } from "react-router-dom";
import { getInvoice } from "../data";

export default function Invoice() {
  let params = useParams();
  let invoice = getInvoice(parseInt(params.invoiceId));
  return (
    <div>
      <h2>发票详情: {invoice.name}</h2>
      <p>金额: {invoice.amount}</p>
    </div>
  );
}

更新路由配置:

<Route path="invoices" element={<Invoices />}>
  <Route path=":invoiceId" element={<Invoice />} />
</Route>

:invoiceId 是一个动态段,匹配的值会作为参数传递给组件。

索引路由

当用户访问 /invoices 但还没有选择具体发票时,我们可以显示一个提示:

<Route path="invoices" element={<Invoices />}>
  <Route index element={<p>请选择一个发票</p>} />
  <Route path=":invoiceId" element={<Invoice />} />
</Route>

索引路由会在父路由匹配但没有子路由匹配时渲染。

活动链接样式

使用 NavLink 可以轻松实现活动链接的高亮效果:

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

<NavLink
  to={`/invoices/${invoice.id}`}
  style={({ isActive }) => ({
    color: isActive ? "red" : "black"
  })}
>
  {invoice.name}
</NavLink>

总结

通过本教程,我们学习了 React Router 的核心概念:

  1. 基本路由配置
  2. 嵌套路由和布局
  3. 动态路由参数
  4. 索引路由
  5. 导航和活动链接样式

这些知识足以构建大多数单页应用的路由系统。React Router 还有更多高级功能如数据加载、表单处理等,可以在掌握这些基础后进一步学习。

记住,路由设计应该反映你的应用结构。良好的路由设计不仅能提供更好的用户体验,还能使代码更易于维护和扩展。

react-router react-router 项目地址: https://gitcode.com/gh_mirrors/react/react-router

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

裴麒琰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值