<button onClick={() => this.showContent(index)}>Show Content</button>
这是一般的想法。您需要将项目的索引传递给您的点击处理程序。在你的点击处理程序中,你可以做一些事情来编辑数组中的项目,将一个showContent
布尔值设置为它们的属性之一,然后像这样使用它......
this.array.map((item, index) => {
return (
<div>
{item.name}
<button onClick={() => this.showContent(index)}>Show Content</button>
{item.showContent &&
this.renderContent()
}
</div>
);
})
...或者您可以维护从项目 ID 到内容可见性的映射,并在渲染时引用它:
constructor(props) {
super(props);
this.state = {
isItemContentVisible: {}
};
}
showContent(id) {
// merge new value with existing visibility status into new object
this.setState({
isItemContentVisible: {
...this.state.isItemContentVisible,
[id]: true
}
});
}
// ...and when you're rendering the list...
this.array.map((item, index) => {
return (
<div>
{item.name}
<button onClick={() => this.showContent(item.id)}>Show Content</button>
{this.state.isItemContentVisible[item.id] &&
this.renderContent()
}
</div>
);
})