javascript - 动态显示模态信息
问题描述
我有一个名为“员工”的对象。然后将人员映射以显示所有人员用户并呈现列表。我需要以某种方式获取我想要停用的员工的姓名,并以模式显示。编码:
const [staff, setStaff] = useState([]);
const handleOpen = () => {
setOpen(true);
};
const handleClose = () => {
setOpen(false);
};
const getStaff = async () => {
try {
const r = await apiClient.get(
endpoints.businessUsersDemographics(idBusiness)
);
if (r.data) {
const rawUsers = r.data.filter((d) => d.ic_active === true);
const staff = rawUsers.filter(
(u) => u.cd_user_type === userType["staff"]`enter code here`
);
setStaff(staff);
}
} catch (err) {
console.log(err);
}
};
return (
<>
{staff.length > 0 &&
staff.map((u) => (
<UserContainer key={u.id_user}>
<UserName>
{u.ds_firstname} {u.ds_lastname}
</UserName>
<UserInfo>{u.ds_mail}</UserInfo>
<UserInfo>{u.ds_title}</UserInfo>
<EditIcon
onClick={() => handleEditUser(u)}
className={classes.icon}
/>
<ClearIcon
className={`${classes.icon} ${classes.delete}`}
onClick={handleOpen}
/>
</UserContainer>
))}
<Modal
aria-labelledby="transition-modal-title"
aria-describedby="transition-modal-description"
className={classes.modal}
open={open}
onClose={handleClose}
closeAfterTransition
BackdropComponent={Backdrop}
BackdropProps={{
timeout: 500,
}}
>
<Fade in={open}>
<div className={classes.continueModal}>
<p>You’re deactivating the following user from the business.</p>
<UserName>No idea how to show the staff's name</UserName>
<p>Would you like to continue?</p>
<Button
variant="contained"
color="primary"
type="submit"
style={{
width: "10rem",
marginTop: theme.spacing(3),
}}
>
Confirm
</Button>
<Button
variant="contained"
color="primary"
type="submit"
style={{
width: "10rem",
marginTop: theme.spacing(3),
}}
>
Cancel
</Button>
</div>
</Fade>
</Modal>
</>
);
我不确定如何呈现要停用的员工的姓名。我尝试这样做:使用 React js Modal 的动态内容,但出现“错误:重新渲染过多。React 限制渲染次数以防止无限循环。”。以下是部分 UI 截图:
我怎么能这样做?我完全糊涂了。谢谢!
解决方案
我会从一个虚假的open
状态值开始。
const [open, setOpen] = useState(null);
转换您的打开/关闭处理程序以获取用户对象。
const handleOpen = (user) => () => {
setOpen(user);
};
const handleClose = () => {
setOpen(null);
};
调用时传递适当的用户对象handleOpen
。(请注意,我已将 open 处理程序编写为 curried 函数)
{staff.length > 0 &&
staff.map((u) => (
<UserContainer key={u.id_user}>
...
<ClearIcon
...
onClick={handleOpen(u)} // <-- pass user object
/>
</UserContainer>
))}
将open
状态值强制为布尔值并访问保存的用户对象以显示名称。
<Modal
...
open={!!open}
...
>
<Fade in={!!open}>
<div className={classes.continueModal}>
...
<UserName>
{open.ds_firstname} {open.ds_lastname} // <-- access the user from open state
</UserName>
<p>Would you like to continue?</p>
...
</div>
</Fade>
</Modal>
此时,变量名open
并不能真正表达它所代表的值。我建议提供更多信息,例如const [selectedUser, setSelectedUser] = useState(null);
. 只需相应地更改所有引用。
推荐阅读
- javascript - 使用 Javascript 比较用户输入
- java - 在 ListView 中显示文件名并存储文件路径
- html - 如何对齐图标字体和按钮内的文本?
- python - python selenium 自动化 instagram
- bash - How to add an entry to the hosts file inside a Docker container?
- php - 如果数字有内部数字字符串
- pandas - 在 numpy 中实现自定义矩阵乘法运算
- java - Java Runtime.exec 在字符串中转义了参数
- jsp - The server cannot started because one or more of the ports are invalid [Tomcat in Eclipse]
- java - Spring Data JPA conditional entity join