reactjs - 如何动态链接到组件
问题描述
我有一个用户数组,我在卡片上显示每个用户。我只显示卡片上的头像、姓名和姓氏。但是当点击每张卡片时,我想动态地转到UserInfo
该卡片的组件并显示所有信息。我是 react-router 的新手,所以为了了解它的工作原理,我尝试使用 react-router。我Link
与 ids 一起使用,但它总是显示Main
组件。它从不显示UserInfo
组件。我做错了什么,但无法弄清楚。你能帮我吗 ?
这是路线:
return (
<Router history={history}>
<div>
<Switch>
<Route path="/" component={Main} true />
<Route path="/users/:id" component={UserInfo} />
</Switch>
</div>
</Router>
);
这是卡片组件:
import React from "react";
import { Link } from "react-router-dom";
function Card({ id, avatar, first_name, last_name }) {
return (
<Link className="card__item" to={`/users/${id}`}>
<div
className="card__image"
style={{ backgroundImage: `url(${avatar})` }}
></div>
<div className="card__text">
<div>
{first_name} {last_name}
</div>
</div>
</Link>
);
}
export default Card;
这就是主要组件返回的内容
return (
<section className="cards container">
<div className="card__grid">
{users.map((user) => {
return <Card key={user.id} {...user} />;
})}
</div>
</section>
);
解决方案
<Route>
如果 prop 的任何部分path
与当前路径匹配,则组件渲染。所以如果你有这个:
<Switch>
<Route path="/" component={Main} true />
<Route path="/users/:id" component={UserInfo} />
</Switch>
第一个<Route>
将始终匹配,因为/
同时匹配/
和 /users/:id
。
组件的顺序<Route>
很重要;通常,您希望将最具体的路由路径放在最前面,将最不具体的路由路径放在最后作为“全部”或后备。在您的情况下,您只需要交换订单。
<Switch>
<Route path="/users/:id" component={UserInfo} />
<Route path="/" component={Main} true />
</Switch>
编辑:或者,您可以设置exact
道具,这将强制匹配准确。这迫使您放置exact
多条(甚至全部)路线,与简单地按照它们应该匹配的顺序对路线进行排序相比,这可能是不可取的。
推荐阅读
- c# - 如果 linq 查询未找到匹配记录,则对象引用未设置错误?
- python - 如何聚合来自不同行的分数并返回 Python 中的最大总分?
- c# - 如何在 TreeNode C# 中创建嵌套循环
- docker - 在 ubuntu 的 docker 上运行 filebeat
- sublimetext3 - 展开后是否可以使用侧按钮标记文本以进一步折叠/展开?
- vue.js - 获取Vuetify多选组件中单击项目的值
- ode - Maxima ODE求解器无法求解逻辑方程?
- android - 未知的命令行选项'--variant'
- actions-on-google - 如何在 Google Home 设备上测试我的操作
- angular - 如何在Angular中从外部调用组件的功能