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

React-Redux联系人应用点击联系人无法显示详情页问题求助

问题分析与修复方案

你的联系人详情页无法展示,核心问题有两个:路由路径不匹配,以及React Router v6中类组件获取路由参数的方式变更,同时缺少空值判断导致渲染报错。

1. 修正路由路径匹配问题

在Contact.js中,你设置的跳转路径是/${card.title},但App.js中定义的详情页路由是/card/:user,路径不匹配导致路由无法命中Card组件,因此页面只显示导航栏。

修改Contact.js中的Link路径:

// 原代码
<Link to={`/${card.title}`} className="ui header">

// 修改后
<Link to={`/card/${card.title}`} className="ui header">

2. 修复Card组件获取路由参数的问题

React Router v6 移除了类组件的match属性,你无法再通过ownProps.match.params获取路由参数。推荐将类组件改为函数组件,使用useParams钩子来获取参数,同时增加空值判断避免渲染报错。

重构Card.js为函数组件:

import React from "react";
import { connect } from "react-redux";
import { useParams } from "react-router-dom";

const Card = ({ cards, deleteCard }) => {
  const { user } = useParams();
  // 根据路由参数查找对应的联系人
  const card = cards.find(item => item.title === user);

  // 处理联系人不存在的情况
  if (!card) {
    return (
      <div className="ui raised very padded text container segment" style={{ marginTop: "80px" }}>
        <p>未找到该联系人</p>
      </div>
    );
  }

  const handleDelete = () => {
    deleteCard(card.id);
  };

  return (
    <div className="ui raised very padded text container segment" style={{ marginTop: "80px" }}>
      <h3 className="ui header">{card.title}</h3>
      <p>{card.body}</p>
      <button className="ui primary right floated button" onClick={handleDelete}>
        Delete
      </button>
    </div>
  );
};

const mapStateToProps = (state) => ({
  cards: state.cards
});

const mapDispatchToProps = (dispatch) => ({
  deleteCard: (id) => dispatch({ type: "deleteCard", id })
});

export default connect(mapStateToProps, mapDispatchToProps)(Card);

3. 补充删除功能的Reducer逻辑(可选)

当前rootReducer未处理deleteCard动作,删除按钮点击后不会有效果,可补充如下:

const rootReducer = (state = initialState, action) => {
  switch (action.type) {
    case "deleteCard":
      return {
        ...state,
        cards: state.cards.filter(card => card.id !== action.id)
      };
    default:
      return state;
  }
};

完成以上修改后,点击联系人条目就能正常跳转到详情页并展示内容,删除功能也能正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:07:32