【发布时间】:2021-05-07 07:42:09
【问题描述】:
我正在尝试为我的 React Js 项目创建像“/products?id=uniqueId”这样的组件路径。唯一 ID 取自数据库,取决于选择的产品。我的代码是
App.js
import "./styles.css";
import { BrowserRouter as Router, Switch, Route } from "react-router-dom";
import Products from "./Products"
import Home from "./Home"
export default function App() {
return (
<div className="App">
<Router>
<Switch>
<Route exact path="/">
{" "}
<Home/>
</Route>
<Route exact path="/products">
{" "}
<Products />
</Route>
</Switch>
</Router>
</div>
);
}
Home.js
import "./styles.css";
import React, { useState } from "react";
import { useHistory } from "react-router-dom";
const products = [
{
id: "1",
name: "Product 1"
},
{
id: "2",
name: "Product 2"
},
{
id: "3",
name: "Product 3"
}
];
export default function Home() {
const [id, setId] = useState();
const history = useHistory();
const handleProceed = (e) => {
// console.log(id, "home");
history.push("/products", { id });
};
return (
<div
style={{ display: "flex", flexDirection: "column", alignItems: "center" }}
>
<div>
{products.map((product) => {
return (
<button
onClick={(e) => {
setId(product.id);
}}
>
{product.name}{" "}
</button>
);
})}
</div>
<button onClick={handleProceed} style={{ width: "250px" }}>
{" "}
Proceed
</button>
</div>
);
}
产品.js
import "./styles.css";
import { useLocation } from "react-router-dom";
export default function Home() {
const location = useLocation();
const { id } = location.state || { id: "none" };
console.log(id);
return (
<div>
<p> Lorem Ipsum</p>
</div>
);
}
想法是当用户在 组件中按下任何带有产品名称的按钮时,页面应重定向到 组件,路径应为“/products?id=uniqueId”,其中 uniqueId = 到 product.id。我能够使用 useHistory() 和 useLocation() 将 product.id 从 传递到 ,但我不知道如何使路径显示选定的 id。例如,如果用户单击产品 1 按钮,则到
非常感谢任何帮助和建议。
【问题讨论】:
-
您可以为此使用路由参数而不是查询字符串值。将路由更改为
<Route exact path="/products/:id">,将Products中的id检索更新为const { id } = useParams();并将Home中的history.push更新为history.push("/products/" + id); -
同意,将产品 ID 作为路径的一部分与查询字符串相比,可以更简单、更轻松地传递/访问它。如果您对此持开放态度,我可以提出解决方案。
标签: javascript reactjs react-router