【发布时间】:2022-01-25 20:27:17
【问题描述】:
我正在尝试从主页打开一个新页面,单击列表上的项目会传递数据。我相信我的代码适用于旧版本的 react-router-dom。有人可以告诉我如何在较新版本的 React 中做同样的事情吗?我需要在新页面中显示 ID 和标题。
我试着按照这里的例子https://codesandbox.io/s/focused-wright-w8il9?file=/src/ViewUserDetails.js:354-377
错误提示 AppPage.js:15 Uncaught TypeError: Cannot read properties of null (reading 'DUMMY_DATA')
如果还有其他更正,请纠正我。我是新手。
谢谢。
GridList.js
import React from "react";
import ReactDOM from "react-dom";
import { Link, useNavigate } from "react-router-dom";
import { Component } from "react";
import GridItem from "./GridItem";
import AppPage from "./AppPage";
import classes from "./GridList.module.css";
import App01 from "./app-01.png";
import App02 from "./app-02.png";
const GridList = (props) => {
const DUMMY_DATA = [
{
title: "tic tac toe",
id: 1,
image: App01,
},
{
title: "snake",
id: 2,
image: App02,
},
];
return (
<div className={classes.gridc1}>
{DUMMY_DATA.map((item) => {
return (
<div key={item.id}>
<Link
to={{
pathname: `/apppage/${item.id}`,
state: { DUMMY_DATA: item },
}}
>
<GridItem key={item.id} image={item.image} />
</Link>
</div>
);
})}
</div>
);
};
export default GridList;
AppPage.js
import React from "react";
import {ReactDOM, render } from "react-dom";
import { useLocation } from "react-router-dom";
import { Component } from "react";
const AppPage = _ => {
const { state }= useLocation();
return (
<div>
<p>{state.DUMMY_DATA.id}</p>
<p>{state.DUMMY_DATA.title}</p>
</div>
);
};
export default AppPage;
【问题讨论】:
-
您的代码对我来说效果很好。我分叉了您的原始示例并输入了您的代码。 codesandbox.io/s/react-router-dynamic-link-forked-ddfw1?file=/…如果你修复了它,请告诉我。
-
嘿,是的。它适用于 react-router-dom v5,但不适用于 v6。 (您可以查看 package.json 以获取更多详细信息)。因此,如果您能帮我解决 v6 的问题,那就太好了。我可以回到 v5,但这意味着我会相应地进行如此多的更改,这没有任何意义。所以任何其他解决方案都会受到赞赏。
-
是的,我刚刚检查了 v6。我认为 react react-dom 和 react-router-dom 的版本只能在特定的组合中工作。尝试删除你的 node_modules 和 npm install @latest 这三个部门。
-
是的。我会试试的。
标签: javascript reactjs routes