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

React中如何实现卡片组件与AllRoles组件的路由链接?

React路由配置问题:卡片链接到AllRoles组件解决方案

问题说明

需要在React项目的Cards组件内,给Card.Footer区域添加跳转链接,点击后触发AllRoles组件中的控制台输出,但配置react-router-dom路由后页面内容消失,寻求解决办法。

错误原因分析

  1. 路由结构错误:在Cards组件内部的卡片渲染函数中嵌套Routes/Route,甚至尝试重复包裹BrowserRouter,违反react-router-dom的路由层级规则,导致组件渲染异常。
  2. AllRoles组件未返回JSX:组件必须返回有效的JSX元素,否则即使路由跳转成功,页面也会无内容,甚至引发报错。

修复步骤

1. 配置根路由(App.js)

确保项目根组件正确使用BrowserRouter包裹所有路由,统一管理路由规则:

import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
import Cards from './Cards';
import AllRoles from './Roles';

function App() {
  return (
    <Router>
      <Routes>
        {/* 首页展示Cards组件 */}
        <Route path="/" element={<Cards />} />
        {/* 跳转至AllRoles组件的路由 */}
        <Route path="/roles" element={<AllRoles />} />
      </Routes>
    </Router>
  );
}

export default App;

2. 修改Cards组件,添加正确的跳转链接

清理Cards组件内错误的路由代码,在Card.Footer中使用Link组件实现跳转:

import React from 'react';
import { Link } from 'react-router-dom'; // 仅保留Link导入
import { useEffect, useState } from "react";
import axios from 'axios';
import Card from 'react-bootstrap/Card';

const baseURL = "../cartas.json";

const Cards = () => {
    const [carta, setCarta] = useState([])

    useEffect(() => {
        axios
            .get(`${baseURL}`)
            .then((response) => {
                setCarta(response.data.cita);
            })
            .catch(err => { console.log(err.message) });
    }, []);

    const renderCard = (card, index) => {
        return (
            <Card className="col-1 col-md-3 w-15 mx-auto" key={index} >
                <Card.Img src={card.imagen}
                    alt={card.nombre}
                    className="py-3 px-3 mx-auto"
                    style={{ width: "12rem" }}>
                </Card.Img>
                <Card.Body>
                    <p className="card-title">{card.descripcion}</p>
                </Card.Body>
                <Card.Footer className="fs-3 py-3 px-3">
                    {/* 添加跳转至AllRoles的Link */}
                    <Link to="/roles">查看角色</Link>
                </Card.Footer>
            </Card>
        )
    }

    return (
        <div className='app row row-cols-12 gap-5 justify-content-md-center'>
            {carta.map(renderCard)}
        </div>
    )
}
export default Cards;

3. 完善AllRoles组件,确保返回JSX

给AllRoles组件添加返回的JSX元素,同时保留控制台输出逻辑:

import React from 'react';
import { useEffect, useState } from "react";

const baseURL = "https://pokeapi.co/api/v2/pokemon/ditto";

const AllRoles = () => {
    const [roles, setRol] = useState([]);

    useEffect(() => {
        fetch(`${baseURL}`)
            .then(response => {
                console.log(response);
                return response.json();
            })
            .then(data => {
                console.log(data);
            })
            .catch((err) => {
                console.log(err.message);
            });
    }, []);
    console.log("hola");

    // 必须返回有效的JSX
    return (
        <div className="container mt-5">
            <h2>角色列表页面</h2>
        </div>
    );
}
export default AllRoles;

验证结果

启动项目后,点击卡片底部的"查看角色"链接,页面会跳转到/roles路径,此时浏览器控制台会输出:

  • "hola"
  • fetch请求的response对象
  • 解析后的Pokemon数据

完全满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 09:40:23