Sha*_*net 1 javascript reactjs react-router-dom
请我需要关于 react-router-dom 的帮助,我是图书馆的新手,从那以后似乎可以找到任何解决方案。我从 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>
);
}
}
Run Code Online (Sandbox Code Playgroud)
选项 1:通过状态
您可以传递映射条目独有的一些状态,例如info.id单击链接时发生的路由推送。这会混淆来自用户的数据,因为您不会将信息泄露到 ui(即浏览器)。
<Link
to={{
pathname: '/home/userDetails',
state: {
infoId: info.id,
},
}}
>
Run Code Online (Sandbox Code Playgroud)
然后,您可以从该location路由返回的组件上的 prop 中解压缩状态。如果用户'/home/userDetails'从其他地方导航到location和/或state可能未定义,请使用守卫。
props.location && props.location.state && props.location.state.infoId
选项 2:在 URL 中传递一些东西
<Link to={`/home/userDetails/${info.id}`>
Run Code Online (Sandbox Code Playgroud)
并从match返回的路由组件中的道具中检索参数。例如,如果路线如下所示:
<Route path="/home/userDetails/:infoId" component={... } />
Run Code Online (Sandbox Code Playgroud)
然后在组件中获取 id:
props.match.params.infoId
Run Code Online (Sandbox Code Playgroud)
用户可以看到这一点,但您不必使用保护模式来访问,因为根据定义,它将由路由定义(尽管infoID如果用户输入无效的 ID,仍然可以定义)。
您可以使用 的路径参数选项react-router-dom。
例子
import React from 'react'
import { BrowserRouter as Router, Route } from 'react-router-dom'
import Topic from '../topic'
export default function App() {
return (
<Router>
<div>
<Route path="/topic/:name" component={Topic} />
</div>
</Router>
);
}
Run Code Online (Sandbox Code Playgroud)
传递参数:
import React, { Component } from "react";
import { Link } from 'react-router-dom'
export default class Topics extends Component {
render() {
return <Link to="/topic/someTopicName">Some Topic</Link>;
}
}
Run Code Online (Sandbox Code Playgroud)
访问组件中的路由器参数
import React from 'react'
export default function Topic(props) {
return <h1>{props.match.params.name}</h1>
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3255 次 |
| 最近记录: |