ise*_*sea 26 reactjs material-ui
在 Material UI v5 的 prop 中寻找巧妙的条件样式sx。我玩过的一个例子是:
const statusStyle = (status) => {
switch (status) {
case "aborted":
return "#D66460";
break;
case "queue":
return "#6685F0";
break;
case "processing":
return "#F0E666";
break;
default:
return "#60D660";
}
};
<TableRow
key={job.job}
sx={{ color: statusStyle(status) }}
>
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有人想出了更优雅的东西?
Nea*_*arl 55
如果它只是一个带有原始键的简单映射,您可以使用一个对象:
const statusColors = {
aborted: '#D66460',
queue: '#6685F0',
processing: '#F0E666',
}
Run Code Online (Sandbox Code Playgroud)
sx={{ color: statusColors[job.status] ?? defaultColor }}
Run Code Online (Sandbox Code Playgroud)
如果您想有条件地传递样式对象,可以使用扩展语法...,这就是 MUI 团队将样式应用于具有不同变体和状态的组件的方式:
sx={{
color: defaultColor,
backgroundColor: defaultBgcolor,
...(job.status === 'aborted' && {
color: color1,
backgroundColor: bgcolor1,
}),
...(job.status === 'queue' && {
color: color2,
backgroundColor: bgcolor2,
}),
...(job.status === 'processing' && {
color: color3,
backgroundColor: bgcolor3,
}),
}}
Run Code Online (Sandbox Code Playgroud)
这似乎对我有用
const [emailStatus, setEmailStatus] = useState('');
const [emailStatusText, setEmailStatusText] = useState('');
const [isEmailSubmitted, setIsEmailSubmitted] = useState(false);
Run Code Online (Sandbox Code Playgroud)
...
return response.json().then((data) => {
const { success, error } = data;
setEmailStatus(success ? 'success' : 'error');
setEmailStatusText(success || error);
return data;
});
Run Code Online (Sandbox Code Playgroud)
...
{isEmailSubmitted && (
<Typography
sx={{
textAlign: 'left',
color:
emailStatus === 'success'
? theme.palette.success.main
: theme.palette.error.main,
}}
>
{emailStatusText}
</Typography>
)}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45622 次 |
| 最近记录: |