React - TypeError:无法读取未定义的属性(读取“params”)

2023-12-05

所以我收到一条错误消息 - TypeError: Cannot readproperties of undefined (reading 'params')

TypeError: Cannot read properties of undefined (reading 'params')
       5 | import products from '../products'
       6 | 
       7 | function ProductScreen({ match }) {
       8 |     const product = products.find((p) => p._id == match.params.id)
       9 |     return (
      10 |         <div>
      11 |             {product.name}

这是我的 ProductScreen.js 文件,导致出现问题

import React from 'react'
import { Link } from 'react-router-dom'
import { Row, Col, Image, ListGroup, Button, Card } from 'react-bootstrap'
import Rating from '../components/Rating'
import products from '../products'

function ProductScreen({ match }) {
    const product = products.find((p) => p._id == match.params.id)
    return (
        <div>
            {product.name}
        </div>
    )
}

export default ProductScreen

和我的 App.js

import { Container } from 'react-bootstrap'
import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'
import Header from './components/Header'
import Footer from './components/Footer'

import HomeScreen from './screens/HomeScreen'
import ProductScreen from './screens/ProductScreen'

function App() {
  return (
    <Router>
      <Header />
      <main className="py-3">
        <Container>
          <Routes>
            <Route path='/' element={<HomeScreen/>} exact />
            <Route path='/product/:id' element={<ProductScreen/>} />
          </Routes>
        </Container>
      </main>
      <Footer />
    </Router>
  );
}

export default App;

我还尝试将 match.params.id 更改为 Number 或 ParseInt (match.params) 但仍然给我一个错误...

我知道这很简单,但我被困在这里,无法进一步...任何帮助将不胜感激!

还有一个问题 - 在 App.js 内部,即 Route 所在的位置,在教程中使用 Components={} 属性而不是 element={}。当我尝试同样的方法时,它给了我一个错误,所以我必须以另一种方式修复它。你知道为什么会导致错误吗?

来自教程

<Route path='/' component={HomeScreen} exact />

我的解决办法——

<Route path='/' element={<HomeScreen/>} exact />

该教程似乎较旧并且使用react-router-dom版本 5,而您正在使用版本 6。在版本 6 中,有许多重大 API 更改。这Route组件不再使用component or render道具,element传递有效 JSX 文字的 prop 替换了它们。路线道具 (history, location, and match)也不再存在,路由组件must现在使用 React hooks 来访问它们。

路线与路线

interface RouteProps {
  caseSensitive?: boolean;
  children?: React.ReactNode;
  element?: React.ReactElement | null;
  index?: boolean;
  path?: string;
}

给定路线:<Route path='/product/:id' element={<ProductScreen/>} />

Use the useParams钩子来访问id匹配参数匹配参数将是一个字符串,因此如果您的产品 ID 是数字类型,那么为了确保严格相等,请将_id属性到字符串以使用类型安全比较。别忘了Array.prototype.find回报undefined如果未找到匹配项,则代码应在渲染时尝试访问结果值以获取属性之前检查结果值。

import { Link, useParams } from 'react-router-dom';
...

function ProductScreen() {
  const { id } = useParams();
  const product = products.find((p) => String(p._id) === id);

  if (!product) return null; // or fallback UI

  return (
    <div>
      {product.name}
    </div>
  );
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React - TypeError:无法读取未定义的属性(读取“params”) 的相关文章

随机推荐

  • 如何找到列末尾的最后一个单元格的值比 Google 表格中的其他列短?

    我试图弄清楚如何将值添加到 Google 表格中特定列的最后一行 并非电子表格 表格中的所有列都具有相同的长度 因此我不能简单地查找最后一行并添加到列中 我需要找到列中的下一个空单元格并在其中添加新值 浏览文档我认为涉及getRange a
  • GPX 文件无法加载 iOS Xcode

    我正在尝试使用 gpx 文件来模拟位置 该文件在 Xcode 中不起作用 也不显示任何错误 文件大小为 1 1 MB 具有从起始点 A 到起始点 B 的跟踪数据 这会引起任何问题吗 有什么建议吗 Ref 将 GPX 文件添加到 Xcode
  • 在滚动上绘制弯曲(响应式)SVG 路径

    在阅读了所有关于使用 strokeDashArray 技巧对 SVG 进行动画处理的讨论后 我终于找到了一些代码来将此功能连接到用户在屏幕上的滚动位置 电缆代码 blog 这个想法很棒 但我有一条波浪形的 弯曲的路径 实际上在某一点上循环
  • 为什么 Java 的 % 运算符对于负股息给出的结果与我的计算器不同?

    为什么在计算器上 1 mod 26 25 但是在 C 或 Java 中 1 26 1 我需要一个像计算器一样解决这个问题的程序 两者有区别吗 两个答案 25 和 1 都是有效的 只是不同的系统有不同的约定 我看到最常见的 数学 是 quot
  • 如何在NamedQuery中编写NamedQuery半正弦公式?

    我想将半正矢公式的查询作为 NamedQuery 运行 但我不知道如何纠正它 set orig lat 37 334542 set orig lon 121 890821 set dist 10 select 3956 2 ASIN SQR
  • ASP.NET Core razor 页面应用程序中左侧的导航菜单带有关闭和打开按钮

    我正在为我的应用程序使用剃刀页面 我尝试将导航菜单从顶部移动到左侧 我按照此链接中提到的步骤操作如何在引导程序中创建保留的侧边栏菜单 因为我希望我的菜单与该链接中显示的完全一样 但我无法达到结果 链接中提到了有关 simple sideba
  • Objective-c 是否遵循操作顺序(Bedmas)?

    我只是想知道 因为我构建的应用程序做了一个相当长的方程 并且结果与在 Excel 电子表格上完成的结果不同 我在 Excel 电子表格上得到了方程 输入数字越大 差异越大 这是我在 xcode 中输入的等式 360 num1 num3 1
  • svg animateMotion 偏离路径

    I have this svg 我的目标是让盒子沿着路径移动 同时保持旋转 为了实现这一点 我添加了一个
  • PHP XML 实体编码问题

    经过几个小时的研究 我无法找到这个问题的答案 我正在尝试将 XML 字符串发送给第三方 因此我需要对一些字符进行编码 在本例中是单引号 也许还有双引号 我使用 PHP XML Dom 来实现此目的 但 saveXML 函数似乎总是对引号进行
  • 如何找到图像像素值的众数(统计数据)?

    我正在使用 opencv 并且可以通过下面的代码获取图像的像素 一个 3 维元组 但是 我不太确定如何计算图像中像素值的模式 import cv2 import numpy as np import matplotlib pyplot as
  • White Line 不断阻止 Android Studio 中的代码

    已经有一段时间了 我是 Android Studio 的新手 这条非常白的线或其他任何东西一直挡住我的视线 因为代码的可见性不断降低 迫使我继续重建我的项目 但什么也没有发生 请建议我一种可以帮助我的方法或原因 None
  • ASP.NET MVC网站从磁盘读取文件问题

    我正在阅读一个文本文件 其中包含在我正在处理的 MVC 网站中使用 C 的 SQL 插入语句 调试我正在使用的函数时工作正常并且插入发生 但是 一旦我发布该网站并在本地计算机上运行它 甚至将 IIS 设置为使用 asp net 4 0 它似
  • Shopify 中的内容安全违规

    我正在使用 Shopify 并向不同的服务器发出 ajax get 请求 我刚刚实现了它 所以我正在控制台上测试它 请求正在通过 我得到了我想要的响应 但我也收到以下消息 仅限报告 拒绝连接到 https myurl com ApiClie
  • s3- boto- 按上传时间列出存储桶内的文件

    我需要每小时从 s3 服务器下载 100 个最新文件 bucketList bucket list PREFIX 上面的代码创建了文件列表 但它不依赖于文件的上传时间 因为它是按文件名列出的 我对文件名无能为力 它是随机给出的 Thanks
  • Cuda 5.0 链接问题

    我只是想使用 cuda 5 0 预览版构建我的一个旧项目 链接时出现错误 告诉我找不到某些 cuda 函数 例如 undefined reference to cudaMalloc 我的链接命令包括以下 cuda 选项 L usr loca
  • 单击可折叠项时 jQuery Mobile 页面跳转到顶部

    我有一个带有面板导航的 jQuery Mobile 页面 最后两个元素可与其他菜单项折叠 展开或折叠这些会导致页面跳转到顶部 并且用户必须再次向下滚动才能选择显示的条目之一 我试图通过执行来抑制这种行为 preventDefault 在可折
  • 消除 Windows 中可执行文件的“发布者未经验证”警告

    我已经为 Windows 创建了一个应用程序 每次通过打开可执行文件运行该应用程序时 我都会在 Windows 中收到 发布者未经验证 警告 如果我是这个应用程序的唯一受众 那很好 但事实并非如此 有什么方法可以对我的应用程序进行编程 以便
  • D3.csv 未从本地 csv 文件加载数据

    I created a copy of the csv file in my local folder because i wanted to mess around with the data a little bit When i ge
  • 如何在 SQL Server 2005 中的一条语句中更新两个表?

    我想一次性更新两张表 如何在 SQL Server 2005 中执行此操作 UPDATE Table1 Table2 SET Table1 LastName DR XXXXXX Table2 WAprrs start stop FROM T
  • React - TypeError:无法读取未定义的属性(读取“params”)

    所以我收到一条错误消息 TypeError Cannot readproperties of undefined reading params TypeError Cannot read properties of undefined re