【发布时间】:2019-01-31 06:50:12
【问题描述】:
我有一个表格组件(父级),在表格的每一行中,还有一个基本上是图像按钮(子级)的组件。单击时,图像按钮会从其默认的三个垂直点 (https://png.icons8.com/windows/1600/menu-2.png) 切换为下载图标。三个垂直点图像有一个 onClick 监听器,将其切换到下载图标,下载图标有一个 onClick 监听器,用于下载表格行中的文件。每个图像按钮都有自己的状态(基于要显示的图像)。在表格组件中,我有一个包裹整个屏幕的 div。单击该 div 时(基本上,如果您单击图像之外的任何位置),我希望能够将表中的所有图像重置回三个点。我不确定如何实现这一点,因为有很多子组件,每个子组件都有自己的状态(因此我认为 redux 不会工作)。有没有办法与表格组件共享每个图像按钮的状态?
这是一些表格代码
<div className='shield' onClick={() => this.resetDownloads()}></div>
<table className='table table-striped'>
<tbody>
this.props.songs.data.map((song, index) =>
<tr key={index}>
<td>{song.name}</td>
<td>{song.artist}</td>
<td>{song.duration}</td>
<td><ActionButton song={song}/></td>
</tr>
</tbody>
</table>
这是一些 ActionButton 组件
class ActionButton extends React.Component {
constructor(props) {
super(props);
this.state = {
download: false
};
this.toggle = this.toggle.bind(this);
}
toggle(e) {
e.stopPropagation();
this.setState({
download: !this.state.download
});
}
render() {
return this.state.download ? (
<div>
<img src={Download} width='15%' onClick={(e) => this.props.downloadSong(this.props.song, e)}></img>
</div>
)
: (
<div>
<img src={Dots} width='15%' onClick={(e) => this.toggle(e)} className='image'></img>
</div>
)
}
}
【问题讨论】:
-
你能分享你的代码吗?
-
@Anas 添加了一些代码!
-
@Ramesh 我看过那个问题,它并不真正适用于我,因为我有很多子组件并且不能使用 redux 来管理所有子组件的状态是相互独立的。
-
表格单元格中的图像只能具有下载状态或3点状态对吗?表中的行数是否事先知道?
标签: javascript reactjs