你需要设置你点击的元素的索引。 Codesandbox 与您上面列出的示例。
更新的 Codesandbox:
https://codesandbox.io/s/material-ui-grid-stacking-forked-2b1r4
import React from "react";
import { makeStyles } from "@material-ui/core/styles";
import GridList from "@material-ui/core/GridList";
import GridListTile from "@material-ui/core/GridListTile";
import GridListTileBar from "@material-ui/core/GridListTileBar";
import ListSubheader from "@material-ui/core/ListSubheader";
import IconButton from "@material-ui/core/IconButton";
import InfoIcon from "@material-ui/icons/Info";
// import tileData from './tileData';
const tileData = [
{
image: "https://via.placeholder.com/150",
title: "Title 1",
icon: "Title Icon 1"
},
{
image: "https://via.placeholder.com/150",
title: "Title 2",
icon: "Title Icon 2"
},
{
image: "https://via.placeholder.com/150",
title: "Title 3",
icon: "Title Icon 3"
}
];
const useStyles = makeStyles((theme) => ({
root: {
display: "flex",
flexWrap: "wrap",
justifyContent: "space-around",
overflow: "hidden",
backgroundColor: theme.palette.background.paper
},
gridList: {
width: 500,
height: 450
},
icon: {
color: "rgba(255, 255, 255, 0.54)"
}
}));
export default function GridComponent() {
const classes = useStyles();
const [title, setTitle] = React.useState("");
const [selected, setSelected] = React.useState();
function handleClick(index, title) {
console.log("title", title);
setSelected(index);
setTitle(title);
}
function handleIconClick(index, icon) {
console.log("icon", icon);
setSelected(index);
setTitle(icon);
}
return (
<div className={classes.root}>
<GridList cellHeight={180} className={classes.gridList}>
<GridListTile key="Subheader" cols={2} style={{ height: "auto" }}>
<ListSubheader component="div">{title}</ListSubheader>
</GridListTile>
{tileData.map((tile, index) => (
<GridListTile
className={index === selected ? "selected" : ""}
key={`${index}${title.title}`}
>
<img
src={tile.image}
alt={tile.title}
onClick={() => handleClick(index, tile.title)}
/>
<GridListTileBar
title={tile.title}
subtitle={<span>by: {tile.author}</span>}
actionIcon={
<IconButton
aria-label={`info about ${tile.title}`}
className={classes.icon}
onClick={() => handleIconClick(index, tile.icon)}
>
<InfoIcon />
</IconButton>
}
/>
</GridListTile>
))}
</GridList>
</div>
);
}