You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为React映射生成的列表项添加路由?

问题分析

你遇到的报错是因为**<Link>指向的路径(/buttons/0、/buttons/1)在<Routes>中没有对应的路由规则**,React Router找不到匹配的组件,所以抛出了路径不匹配的错误。

修复方案

核心思路是让按钮的跳转路径和已配置的路由规则对应,同时优化选中状态的管理(依赖路由状态而非手动维护的state,避免刷新页面状态丢失)。

步骤1:调整按钮与路由的对应关系

把按钮数组改成包含「显示文本」和「对应路由路径」的对象,避免通过index硬编码路径:

const buttons = [
  { text: "About me", path: "/" },
  { text: "Todos", path: "/todo" }
];

步骤2:用路由状态控制按钮选中样式

通过useLocation钩子获取当前路由路径,用它判断按钮是否处于选中状态,替代原来的clicked状态:

  1. 先引入useLocation:
import { BrowserRouter as Router, Route, Link, Routes, useLocation } from "react-router-dom";
  1. 在组件内获取当前路由:
const location = useLocation();

完整修改后的代码

import React from "react";
import Todo from "../Todo/Todo";
import About from "../About/About";
import { BrowserRouter as Router, Route, Link, Routes, useLocation } from "react-router-dom";
import classnames from "classnames";
import styles from "./App.module.css";

const App = () => {
  const location = useLocation();
  const buttons = [
    { text: "About me", path: "/" },
    { text: "Todos", path: "/todo" }
  ];

  return (
    <Router>
      <div>
        <nav className={styles.menu}>
          <ul className={styles.nav}>
            {buttons.map((item, index) => {
              return (
                <li key={index}>
                  <Link to={item.path}>
                    <button
                      className={classnames(
                        styles.button,
                        { [styles.selected]: location.pathname === item.path }
                      )}
                    >
                      {item.text}
                    </button>
                  </Link>
                </li>
              );
            })}
          </ul>
        </nav>
        <Routes>
          <Route path="/" element={<About />} />
          <Route path="/todo" element={<Todo />} />
        </Routes>
      </div>
    </Router>
  );
}

export default App;
关键修改说明
  1. 路径匹配:按钮的跳转路径直接对应已配置的/和/todo,解决了路由不匹配的核心问题。
  2. 状态同步:用location.pathname判断选中状态,路由切换(包括刷新页面)时选中样式会自动同步,不需要手动维护clicked状态。
  3. 代码简洁性:移除了冗余的onClick逻辑,让路由职责更清晰。

内容的提问来源于stack exchange,提问作者Valery

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 17:06:50