在我的应用中,我会显示一个包含额外信息(未显示)的项目列表,以及每个项目旁边的按钮以“查看”更多信息。我想在模态中显示额外的信息。我成功实现了模态,它以我想要的方式显示信息。
但问题是当我点击第二个列表项的按钮时,信息没有被更新,它仍然显示旧信息(第一个项目)。我该如何解决这个问题?为什么会这样?
从另一个类调用map函数:
<List>
this.props.enrolledClasses.map(enrolledClass => (
<ClassesPeek
title="Overview"
enrolledClass={enrolledClass}
/>
</List>
ClassesPeek:
<List.Item>
<span>{this.props.enrolledClass.name}
<button type="button" className="ui compact primary button mt-3" data-toggle="modal" data-target="#details">
View
</button>
<div class="modal" id="details">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<center><h4 class="modal-title">{this.props.enrolledClass.name}</h4></center>
<button type="button" className="close" data-dismiss="modal">×</button>
</div>
<div class="modal-body">
{this.props.enrolledClass.description}
</div>
</div>
</div>
</div>
</span>
</List.Item>
所以在上面的代码中,当我点击第二个列表项的“查看”按钮时,模态仍然显示第一个项目的名称和描述。
答案 0 :(得分:2)
它将始终显示旧的,因为您没有通过将唯一键(id)传递给模态来指定它应该查看哪一个。将您的代码更新到以下代码段然后它将按预期工作
<List.Item>
<span>{this.props.enrolledClass.name}
<button type="button" className="ui compact primary button mt-3" data-toggle="modal" data-target={`#details${this.props.enrolledClass.id}`} id={`#details${this.props.enrolledClass.id}`}>
View
</button>
<div class="modal" id={`details${this.props.enrolledClass.id}`}>
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<center><h4 class="modal-title">{this.props.enrolledClass.name}</h4></center>
<button type="button" className="close" data-dismiss="modal">×</button>
</div>
<div class="modal-body">
{this.props.enrolledClass.description}
</div>
</div>
</div>
</div>
</span>
</List.Item>
答案 1 :(得分:-2)
我认为这种情况的主要原因是您的JavaScript代码会在按钮单击时打开模式。你可以检查一下吗?我建议总是使用ref来代替id。