我需要用LinearProgress修复我的SnackBar,使其与4秒内设置的自动隐藏持续时间相匹配。我已经挣扎了好几个小时,但到目前为止我还没有找到一个合适的解决方案。有没有什么方法可以匹配自动隐藏持续时间和LinerProgress,使两者都持续4秒,然后snackBar自动关闭?我使用了MUI线性进度组件的代码。也许问题出在使用效果上?我是新来的,所以不是100%确定。谢谢你的建议!
这是我的代码:
interface SuccessMessageProps {
open: boolean;
onClose: () => void;
title?: string;
message?: string;
}
const SlideTransition = (props: SlideProps) => <Slide {...props} direction="left" />;
export const SuccessMessage = ({
open,
onClose,
title = 'Title',
message = 'Insert message here' }: SuccessMessageProps ) => {
const { palette } = useTheme();
const [progress, setProgress] = useState(0);
const [showLinearProgress, setShowLinearProgress] = useState(false);
const handleClose = (): void => {
onClose();
};
useEffect(() => {
const timer = setInterval(() => {
setProgress((oldProgress) => {
if (oldProgress === 100) {
return 0;
}
const diff = Math.random() * 15;
return Math.min(oldProgress + diff, 100);
});
}, 400);
return () => {
clearInterval(timer);
};
}, []);
return (
<Snackbar
open={open}
autoHideDuration={4000}
anchorOrigin={{ vertical: 'top', horizontal: 'right' }}
TransitionComponent={SlideTransition}
onClose={handleClose}
>
<div>
<Alert
sx={{
width: '487px',
height: '104px',
paddingTop: '20px',
paddingLeft: '20px',
backgroundColor: '#FDFDFD',
}}
icon={(
<Stack
justifyContent="center"
alignItems="center"
style={{
borderRadius: '100%',
backgroundColor: alpha(palette.success.main, 0.10),
width: '48px',
height: '48px',
}}
>
<CheckIcon
size={24}
color={palette.success.main}
/>
</Stack>
)}
onClose={handleClose}
>
<AlertTitle sx={{ paddingRight:'80px' }}>
<Typography variant='headings.h4'>{title}</Typography>
</AlertTitle>
<Typography variant='captions.default'>{message}</Typography>
</Alert>
{!showLinearProgress
&& <LinearProgress variant="determinate" sx={{ color:'#222221' }} value={progress} />}
</div>
</Snackbar>
);
};
1条答案
按热度按时间uqxowvwt1#
我们首先需要找到:
注意:有一个react库,我认为它对以后的问题会很有帮助
所以,这是我能够创建的:
NB 2:当然,这可以进一步优化。
MUI Snackbar API
MUI LinerProgress API