How to pass data from a page to another page using react router(如何使用Reaction路由器将数据从一页传送到另一页)
问题描述
请帮助我了解REACT-ROUTER-DOOM,我是新手,似乎可以找到任何解决方案。我从API调用中获得了三个结果,在该API调用中,我将数据映射到UI上,现在我需要的是,如果我单击其中一个列表上的一行,我希望它将我带到一个屏幕,仅显示我所单击的那一项的详细信息。
import React, { Component } from "react";
export default class User extends Component {
state = { userDetails: "" };
componentDidMount() {
axios.get(`https://urlforapi.com`)
.then(({ data }) => {
this.setState({
userDetails: data
});
});
}
render() {
const { userDetails } = this.state;
return (
<div>
{userDetails
? userDetails.map(info => {
return (
<Link to="/home/userDetails">
<div key={info.id}>
<p>{info.name}</p>
</div>
<div>
<p>{info.age}</p>
</div>
<div>
<p>{info.description}</p>
</div>
</Link>
);
})
: null}
</div>
);
}
}
推荐答案
选项1:传递路由状态
发送路由转换中的状态。
- 使用
react-router-dom
v5
您可以传递映射条目独有的某种状态,如info.id
以及在单击链接时发生的路由推送。这会混淆来自用户的数据,因为您不会将信息泄露给用户界面(即浏览器)。
<Link
to={{
pathname: '/home/userDetails',
state: {
infoId: info.id,
},
}}
>
- 使用
react-router-dom
v6
V6中的链接API稍有更改,state
现在是一个道具。
<Link
to='/home/userDetails'
state={
infoId: info.id,
}
>
然后,您可以从该路线返回的组件上的location
道具/对象解包状态。如果用户已从其他位置导航到'/home/userDetails'
,则使用保护,因为state
可能是未定义的。
如果通过路线道具:
props.location && props.location.state && props.location.state.infoId
或
props.location?.state?.infoId
如果使用函数组件,则还可以使用useLocation
反应挂钩:
const { state: { infoId } = {} } = useLocation();
选项2:在URL中传递内容
<Link to={`/home/userDetails/${info.id}`>
并从返回的路由组件中的match
道具中检索参数。例如,如果路由如下所示:
<Route path="/home/userDetails/:infoId" component={... } />
然后在组件中获取id:
props.match.params.infoId
对于功能组件,useParams
反应挂钩:
const { infoId } = useParams();
用户可以看到这一点,但您不必使用保护模式来访问,因为根据定义,它将由路由定义(尽管infoID
如果用户输入无效的ID,仍可以定义)。
- Link to
- location
- match
- useLocation
- useParams
这篇关于如何使用Reaction路由器将数据从一页传送到另一页的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何使用Reaction路由器将数据从一页传送到另一页


- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- addEventListener 在 IE 11 中不起作用 2022-01-01
- Fetch API 如何获取响应体? 2022-01-01
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- Flexslider 箭头未正确显示 2022-01-01
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
- 400或500级别的HTTP响应 2022-01-01
- 失败的 Canvas 360 jquery 插件 2022-01-01
- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01