在名为talkes的状态中设置一个对象生命数组
[
{
"firstName": "B",
"lastName": "W",
"day": "2022-09-30T23:06:26.000Z",
"reasons": [
"Car related questions"
],
"description": ""
},
{
"firstName": "Kevin",
"lastName": "L",
"day": "2022-09-30T23:06:26.000Z",
"reasons": [
"Car related questions"
],
"description": ""
},
{
"firstName": "M",
"lastName": "K",
"day": "2022-09-30T23:06:26.000Z",
"reasons": [
"Car related questions"
],
"description": ""
}
]
有一个map函数将状态的单个对象Map到Card组件
talks.map((talk, index) => {
return
<Card>
<CardHeader
avatar={
<Avatar sx={{ bgcolor: 'secondary.main' }} aria-label="recipe">
{talk.firstName.charAt(0)}
</Avatar>
}
action={
<div>
<IconButton onClick={(e) => setCardMoreOpen(e.currentTarget)} aria-label="settings">
<MoreVertIcon />
</IconButton>
<StyledEngineProvider injectFirst>
<Menu
elevation={1}
id="basic-menu"
anchorEl={cardMoreOpen}
open={Boolean(cardMoreOpen)}
onClose={() => setCardMoreOpen(null)}
>
<MenuItem key={index} onClick={menuUpdate(index)}>Edit</MenuItem>
<MenuItem onClick={() => setCardMoreOpen(null)}>Delete</MenuItem>
</Menu>
</StyledEngineProvider>
</div>
}
title={title}
subheader={time}
/>
<CardContent>
{
reasons.map(
(reason, index) => (
reason === 'Other' ?
<Typography key={index} variant="body2">
{description}
</Typography> :
<Typography key={index} variant="body2">
{reason}
</Typography>
)
)
}
</CardContent>
</Card>
理想情况下,<MenuItem key={index} onClick={menuUpdate(index)}>Edit</MenuItem>
内部的menuUpdate(index)
可以更新状态变量,因此每个卡组件都与state数组中的每个对象相关联,并且具有更新状态对象的能力。
const menuUpdate = index => e=> {
console.log(index)
}
但是,索引始终是状态数组的最后一个索引。我还尝试在onClick、onClick={()=>menuUpdate(index)}
和回调函数中使用箭头函数,如
const menuUpdate = (index) => {
console.log(index)
}
运气不好。有人能给予吗?困在这里很久了。先谢了!
2条答案
按热度按时间mkh04yzy1#
我自己想出了答案。我需要将卡片提取到另一个组件中,并将索引作为 prop 传递,这样我就可以单独更新它。希望这能有所帮助。
mwkjh3gx2#
函数必须是这样的
和onClick必须是回调函数,以便添加参数