反应路由器:使用 <链接> 作为可点击的数据表行
React-router: Using <Link> as clickable data table row
我是使用ReactJS和react-router的新手。我想要一个可点击的表格行和类似于以下设置的内容:
<Link to=“#”>
<tr>
<td>{this.props.whatever1}</td>
<td>{this.props.whatever2}</td>
<td>{this.props.whatever3}</td>
</tr>
</Link>
但我知道你不能在<tbody>
和<tr>
标签之间放置<a>
标签。我还能如何做到这一点?
PS:如果可能的话,我宁愿不使用jQuery。
onClick
有效,但有时出于各种原因您需要一个实际的<a>
标签:
- 可及性
- 渐进式增强(如果脚本抛出错误,链接仍然有效)
- 能够在新选项卡中打开链接
- 能够复制链接
下面是一个接受to
属性的 Td 组件示例:
import React from 'react';
import { Link } from 'react-router-dom';
export default function Td({ children, to }) {
// Conditionally wrapping content into a link
const ContentTag = to ? Link : 'div';
return (
<td>
<ContentTag to={to}>{children}</ContentTag>
</td>
);
}
然后像这样使用组件:
const users = this.props.users.map((user) =>
<tr key={user.id}>
<Td to={`/users/${user.id}/edit`}>{user.name}</Td>
<Td to={`/users/${user.id}/edit`}>{user.email}</Td>
<Td to={`/users/${user.id}/edit`}>{user.username}</Td>
</tr>
);
是的,您必须多次传递to
道具,但同时您可以更好地控制可点击区域,并且表格中可能有其他交互式元素,例如复选框。
你为什么不直接使用 onClick?
var ReactTable = React.createClass({
handleClick: function(e) {
this.router.transitionTo('index');
},
render: function() {
return(
<div>
<table>
<thead>
<tr>
<th>Name</th>
<th>Age</th>
<th>Full Detail</th>
</tr>
</thead>
<tbody>
<tr onClick={this.handleClick.bind(this)}>
<td>{user.name}</td>
<td>{user.age}</td>
<td>{details}</td>
</tr>
</tbody>
</table>
</div>
);
}
});
这个答案是基于@Igor Barbasin的建议。这会将链接添加到整行而不仅仅是内容,我们也不需要用"链接"包装所有单独的"td"元素。
.table-row {
display: table-row
}
export default function Table() {
return (
<table>
<thead>
<tr>
<th>Name</th>
</tr>
</thead>
<tbody>
{/* treats the link element as a table row element */}
<Link className="table-row">
<td>Noname</td>
</Link>
</tbody>
</table>
)
}
您可以使用
useHistory()
钩子:
宣:
const history = useHistory();
并将其与<tr>
或<td>
标签一起使用:
<tr onClick={() => history.push("/yoururl")}>
<td>{this.props.whatever1}</td>
<td>{this.props.whatever2}</td>
<td>{this.props.whatever3}</td>
</tr>
{shipment.assets.map((i, index) => (
<tr
style={{ cursor: "pointer" }}
onClick={(e) => e.preventDefault()}
>
<td>{index + 1}</td>
<td>{i._id}</td>
<td>{i.status}</td>
<td></td>
</tr>
))}
相关文章:
- 使用 IP 地址和超链接对数据表进行排序
- 如何在数据表的命令链接中使用 ajax 禁用表单字段
- 从chrome扩展创建一个包含POST数据的链接
- 将表单元格数据转换为单独.js文件中的内部链接
- 使来自 GetJson 数组的循环数据成为链接
- 轨道:找不到文件“提前输入.js”.直到我删除“数据涡轮链接”
- 如何在 BreezeJS 元数据中定义矩阵/链接/交叉表连接
- 反应路由器:使用 <链接> 作为可点击的数据表行
- 光滑网格数据查看链接
- 使表行可单击时 jquery 中出现问题,其中包含表数据中的链接
- 超级链接不适用于第二行+数据表
- 数据表点击td或td内的(链接)
- 显示来自xml数据的链接
- Jquery-向数据表添加超链接
- 有没有办法重新加载涡轮链接数据-涡轮链接-永久
- 如何将数据从链接传递到 jQuery 函数
- 流式传输文档数据后链接未打开
- 如何切割画布数据URI链接
- 如何将HTML5画布模型与MVVM/MPV数据框架链接起来
- 从动态生成的数据创建链接