【发布时间】:2017-09-22 21:20:05
【问题描述】:
我的 react 应用有问题。我已经生成了 100 个项目的列表。我使用地图功能显示列表中的每个元素
<ul className="list">
{this.props.items.map((item) => {
return (
<ItemView
key={item.id}
id={item.id}
name={item.name}
strenght={item.strenght}
age={item.age}
/>
);
})}
</ul>
我的项目视图显示名称、年龄和强度。 on mouseEnter 显示按钮,点击后在被点击的元素下显示模态。
class ItemView extends React.Component {
constructor(props) {
super(props);
this.state = {
isMouseInside: false,
isModalOpen: false,
};
}
mouseEnter = () => {
this.setState({ isMouseInside: true });
};
mouseExit = () => {
this.setState({ isMouseInside: false });
};
showModal = () => {
this.setState({ isModalOpen: !this.state.isModalOpen });
};
closeModal = () => {
this.setState({ isModalOpen: false });
};
render() {
return (
<li
onMouseEnter={this.mouseEnter}
onMouseMove={this.mouseEnter}
onMouseLeave={this.mouseExit}
>
<div className="item__row">
<h5>{this.props.name}</h5>
<h6>Age: {this.props.age}</h6>
<p>{this.props.strenght}/100</p>
{this.state.isMouseInside ? (
<button className="btn" onClick={() => this.showForm(false)}>
Change data
</button>
) : null}
</div>
{this.state.isModalOpen ? (
<Modal
onSubmit={this.handleSubmitForm}
/>
) : null}
</li>
);
}
}
我想要做的是防止阻止打开两个模态的可能性,甚至更好的是,如果单击另一个 itemView 中的另一个按钮后,打开的模态将被关闭并且合适的会打开。
现在发生的事情是我可以打开多个模态并且everythink 工作,但我想让一个模态显示在页面上。
我尝试在 showModal 函数中的 this.setState({ isModalOpen: !this.state.isModalOpen }) 之前创建另一个函数 closeModal 将 isModalOpen 的状态设置为 false,但它不起作用。
在这个应用程序中,我使用 redux,如果 redux 可以帮助解决问题,我可以使用它。
Visualization what i want to do
CODEPEN 示例:https://codepen.io/dominik3246/pen/QqKzzp
【问题讨论】:
-
你能把你的代码放在codepen上吗?我们会更容易解决这个问题。
-
一个类似的例子,但工作方式相同codepen.io/dominik3246/pen/QqKzzp
-
好的,这很酷。只是为了澄清您的要求 - 您只需要打开一个模式。当打开一个模态并单击“更改数据”时,该模态将关闭并且与“更改数据”相关的模态将打开?
-
是的,正是:)
-
当您认为 stackoverflow 上的问题有正确答案时,您应该勾选“非常好”的标志以将其标记为您的答案。当有一个您认为对不属于您的问题有好处的答案时,您可以通过单击该问题旁边的向上箭头来投票。随着您在 SOF 上的进展,如果您认为答案无效或不符合 SOF 标准,您还将有权拒绝投票