如何在反应中呈现多个模态?
How to render multiple modals in react?
我需要渲染多个模态,但模态的数量不固定,取决于进入对象的 属性 audios
。我目前正在使用 mui 模态
这是使用的变量:
const [open, setOpen] = useState(false);
const handleOpen = () => setOpen(true);
const handleClose = () => setOpen(false);
这就是我尝试渲染模式的方式。目前,无论我点击哪个 'View' 按钮
,点击 'view' 后打开的模式只显示 audios
中的最后一个值
{audios.map((a) => (
<Grid item container justifyContent="flex-end">
<Button
onClick={handleOpen}
sx={{
color: 'blue',
marginTop: '0.6rem',
}}
>
View
</Button>
<Modal
open={open}
onClose={handleClose}
>
<Box
sx={{
position: 'absolute' as 'absolute',
top: '50%',
left: '50%',
p: 4,
}}
>
<Typography color='white'>{a.name}</Typography>
</Box>
</Modal>
</Grid>
))}
有没有办法让每个模态的打开和关闭状态分开?
我认为你应该把 'open' 状态放在 Modal 组件中,这样每个 Modal 都有自己的状态。
const MyModalandButton=()=>{
const [open, setOpen] = useState(false);
const handleOpen = () => setOpen(true);
const handleClose = () => setOpen(false);
return <>
<Button
onClick={handleOpen}
sx={{
color: 'blue',
marginTop: '0.6rem',
}}
>
View
</Button>
<Modal
open={open}
onClose={handleClose}
> </>
}
也许就是这样
我需要渲染多个模态,但模态的数量不固定,取决于进入对象的 属性 audios
。我目前正在使用 mui 模态
这是使用的变量:
const [open, setOpen] = useState(false);
const handleOpen = () => setOpen(true);
const handleClose = () => setOpen(false);
这就是我尝试渲染模式的方式。目前,无论我点击哪个 'View' 按钮
,点击 'view' 后打开的模式只显示audios
中的最后一个值
{audios.map((a) => (
<Grid item container justifyContent="flex-end">
<Button
onClick={handleOpen}
sx={{
color: 'blue',
marginTop: '0.6rem',
}}
>
View
</Button>
<Modal
open={open}
onClose={handleClose}
>
<Box
sx={{
position: 'absolute' as 'absolute',
top: '50%',
left: '50%',
p: 4,
}}
>
<Typography color='white'>{a.name}</Typography>
</Box>
</Modal>
</Grid>
))}
有没有办法让每个模态的打开和关闭状态分开?
我认为你应该把 'open' 状态放在 Modal 组件中,这样每个 Modal 都有自己的状态。
const MyModalandButton=()=>{
const [open, setOpen] = useState(false);
const handleOpen = () => setOpen(true);
const handleClose = () => setOpen(false);
return <>
<Button
onClick={handleOpen}
sx={{
color: 'blue',
marginTop: '0.6rem',
}}
>
View
</Button>
<Modal
open={open}
onClose={handleClose}
> </>
}
也许就是这样