根据不同状态值(如 failed 和 success)渲染不同颜色的 Material-UI <Dialog>,可以使用 Dialog 的 style 属性或自定义 Dialog 的 PaperProps 来控制其外观。可以通过传入状态(failed 或 success)动态设置不同的背景颜色或其他样式。
示例代码
jsx
import React, { useState } from 'react';
import { Dialog, DialogTitle, DialogContent, DialogActions, Button } from '@mui/material';
function StatusDialog({ open, onClose, status }) {
// 根据不同状态设置 Dialog 样式
const getDialogStyle = () => {
switch (status) {
case 'success':
return {
backgroundColor: '#4caf50', // 绿色,表示成功
color: 'white'
};
case 'failed':
return {
backgroundColor: '#f44336', // 红色,表示失败
color: 'white'
};
default:
return {
backgroundColor: '#ffffff', // 默认白色
color: 'black'
};
}
};
return (
<Dialog
open={open}
onClose={onClose}
PaperProps={{
style: getDialogStyle() // 设置 Dialog 样式
}}
>
<DialogTitle>{status === 'success' ? 'Success' : 'Failed'}</DialogTitle>
<DialogContent>
{status === 'success' ? 'Operation was successful!' : 'Operation failed! Please try again.'}
</DialogContent>
<DialogActions>
<Button onClick={onClose} style={{ color: 'white' }}>
Close
</Button>
</DialogActions>
</Dialog>
);
}
function App() {
const [open, setOpen] = useState(false);
const [status, setStatus] = useState('');
const handleOpenDialog = (newStatus) => {
setStatus(newStatus);
setOpen(true);
};
const handleCloseDialog = () => {
setOpen(false);
};
return (
<div>
<Button onClick={() => handleOpenDialog('success')} variant="contained" color="primary">
Open Success Dialog
</Button>
<Button onClick={() => handleOpenDialog('failed')} variant="contained" color="secondary">
Open Failed Dialog
</Button>
<StatusDialog open={open} onClose={handleCloseDialog} status={status} />
</div>
);
}
export default App;
代码详解
-
getDialogStyle函数 :根据status的不同值(success或failed),返回不同的样式,包括背景颜色和字体颜色。success状态时,返回绿色背景,failed时返回红色背景。 -
Dialog组件:- 使用了
PaperProps传递动态样式,以改变Dialog的背景颜色。 - 根据状态的不同,动态地设置
DialogTitle和DialogContent的内容。
- 使用了
-
按钮触发:
handleOpenDialog函数根据用户点击的按钮设置status的值,然后打开Dialog。status控制Dialog显示的内容以及背景颜色。
总结
通过这种方式,可以根据状态 (failed 和 success) 动态调整 Material-UI 的 Dialog 样式,让用户根据颜色来直观识别操作结果。