【发布时间】:2020-08-11 01:35:19
【问题描述】:
所以我有一个表格,显示来自 API 调用的多个作业。每个表格行都有一个按钮,用于打开引导模式,显示有关所述作业的更多信息。
我的问题是模式似乎没有为单击的行打开。它总是打开一个特定的行(具有最低 id 的行)。有人知道我在做什么错吗?
ModalComponent
render() {
console.log("job: ", this.props.id)
return (
<div className="container">
<ReactBootstrap.Modal
{...this.props}
size="lg"
aria-labelledby="contained-modal-title-vcenter"
centered
>
<ReactBootstrap.Modal.Header closeButton>
<ReactBootstrap.Modal.Title id="contained-modal-title-vcenter">
{this.props.title}
{this.props.employer}
</ReactBootstrap.Modal.Title>
</ReactBootstrap.Modal.Header>
<ReactBootstrap.Modal.Body>
<h4>Would you like to apply to this job?</h4>
<p>{this.props.description}</p>
</ReactBootstrap.Modal.Body>
<ReactBootstrap.Modal.Footer>
<button className="btn btn-primary" onClick={this.applyJob}>Apply</button>
<button className="btn btn-warning" onClick={this.props.onHide}>Close</button>
</ReactBootstrap.Modal.Footer>
</ReactBootstrap.Modal>
</div>
)
}
console.log 吐出表格中每一行的 id。
我的TableComponent 将每个作业的作业详细信息传递到ModalComponent,如下所示:
TableComponent
<tbody>
{
this.props.response.map( // map allows you to loop around items
job => // a key is used to identify a row
<tr key={job.id}>
<td>{job.employer}</td>
<td>{job.jobTitle}</td>
<td>{job.county}</td>
{/* <td>{job.applied + ''}</td> */}
<td>
{this.checkApplied(job.applied)}
</td>
<td><button className="btn btn-info" onClick={() => this.setState({ addModalShow: true })}>Info</button></td>
<ApplyComponent
show={this.state.addModalShow}
onHide={addModalClose}
id={job.id}
title={job.jobTitle}
employer={job.employer}
county={job.county}
description={job.description}
status={job.applied}
/>
</tr>
)
}
</tbody>
如您所见,即使单击顶行,底行的详细信息也会显示在模态中。
【问题讨论】:
-
在每个模式中添加一个 console.log 或其他东西来记录一些独特的东西(比如和 id),它很有可能打开所有这些,而你只看到最后一个打开的。您可以通过检查控制台日志确定打印了多少个 id。
-
看起来你们俩都是对的,但我正在努力实施修复。
-
@BrianThompson 我觉得我的做法与链接帖子中的解决方案相同吗?
-
addModalShow是状态中的单个属性。当您单击要打开的项目时,onClick将该属性设置为 true。从地图返回的每一项都在监听那个值 (addModalShow) 以确定它是否应该打开。所以无论你点击哪一个,它们都会打开。我指出的误导部分是您只看到最后一个,而不是全部。对于如何避免这种情况,您有几种选择。我将继续使用这些选项添加答案,但问题与链接问题基本相同。
标签: javascript reactjs bootstrap-4 bootstrap-modal react-bootstrap