gpt4 book ai didi

javascript - React 和 Material 用户界面 : how can I expand only one single card

转载 作者:行者123 更新时间:2023-11-29 20:27:33 24 4
gpt4 key购买 nike

我正在使用 React 和 Material UI 来显示一些已映射的卡片。当我尝试展开卡片时,所有卡片都同时展开。我发现我必须在我的“handleExpandClick”函数中传递一个索引,但仍然无法正常工作。可能是我打错了。

我发现了这个问题 Expand one card on click关于同样的问题,但似乎不适用于我的情况。

这是我的一段代码:

const useStyles = makeStyles(theme => ({
card: {
maxWidth: 345,
marginBottom: 15
},
media: {
height: 0,
paddingTop: "56.25%" // 16:9
},
expand: {
transform: "rotate(0deg)",
marginLeft: "auto",
transition: theme.transitions.create("transform", {
duration: theme.transitions.duration.shortest
})
},
expandOpen: {
transform: "rotate(180deg)"
},
avatar: {
width: 90
},
root: {
display: "flex",
justifyContent: "center",
flexWrap: "wrap",
"& > *": {
margin: theme.spacing(0.5)
}
},
list: {
width: 200
}
}));

const ItininerariesList = ({ itineraries, activities }) => {
const classes = useStyles();
const [expanded, setExpanded] = React.useState(false);

let path = window.location.pathname;
let currentId = path.substring(path.lastIndexOf("/") + 1);

const itinerariesPerCity = itineraries.filter(
itiner => itiner.city_id === currentId
);


const handleExpandClick = () => {
setExpanded(!expanded);
};


return (
<Fragment>
{itinerariesPerCity.map((itinerary, i) => (
<Card className={classes.card} key={itinerary._id}>
<CardHeader
avatar={
<Grid
container
direction="column"
justify="flex-start"
alignItems="center"
className={classes.avatar}
>
<Avatar
aria-label="user"
alt={itinerary.profile_name}
src={itinerary.profile_img}
>
<PersonIcon />
</Avatar>
<Typography variant="caption" component="p">
{itinerary.profile_name}
</Typography>
</Grid>
}
action={
<IconButton aria-label="settings">
<MoreVertIcon />
</IconButton>
}
title={itinerary.title}
subheader={itinerary.sub_title}
/>

<CardContent>

</CardContent>
<CardActions disableSpacing>
<IconButton aria-label="add to favorites">
<FavoriteIcon />
</IconButton>
<IconButton aria-label="share">
<ShareIcon />
</IconButton>
<IconButton
className={clsx(classes.expand, {
[classes.expandOpen]: expanded
})}
onClick={() => handleExpandClick()}
aria-expanded={expanded}
aria-label="show more"
>
<ExpandMoreIcon />
</IconButton>
</CardActions>
<Collapse in={expanded} timeout="auto" unmountOnExit>
<CardContent>
<ActivitiesList
activities={activities}
itineraryId={itinerary._id}
/>
</CardContent>
</Collapse>
</Card>
))}
</Fragment>
);
};

export default ItininerariesList;

如有任何建议或指导,我们将不胜感激。提前谢谢你。

最佳答案

在展开处理程序中,您确实必须传递索引。并且还在状态下使用它。类似的东西:

const [expandedId, setExpandedId] = React.useState(-1);

...

const handleExpandClick = (i) => {
setExpandedId(expandedId === i ? -1 : i);
};

...


<CardContent />
<CardActions disableSpacing>
<IconButton aria-label="add to favorites">
<FavoriteIcon />
</IconButton>
<IconButton aria-label="share">
<ShareIcon />
</IconButton>
<IconButton

onClick={() => handleExpandClick(i)}
aria-expanded={expandedId === i}
aria-label="show more"
>
<ExpandMoreIcon />
</IconButton>
</CardActions>
<Collapse in={expandedId === i} timeout="auto" unmountOnExit>
<CardContent>
<div>ActivitiesList</div>
</CardContent>
</Collapse>

这是一个工作示例:https://codesandbox.io/s/eloquent-sara-wswrn

关于javascript - React 和 Material 用户界面 : how can I expand only one single card,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58953627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com