首页 > 解决方案 > autoHideDuration 在使用钩子的 Snackbar 中不起作用

问题描述

我在我的 reactjs 项目中的许多地方都使用了 @material-ui 小吃吧;然而,当涉及到 onClose 和 onClick 处理程序时,这会导致代码重复。所以我决定将参数移动到一个钩子上。随后,当我创建钩子并将代码移过来时,autoHideDuration 停止工作。我很好奇为什么?

我已经尝试将 Snackbar 组件移动到钩子中并使用参数渲染完整的小吃栏,但这也不起作用。

在这一点上,我刚刚制作了一个自定义组件,它包含了快餐栏组件和处理程序,并在我的整个项目中导入了自定义组件。尽管如此,我仍然想找到一个解决方案,说明为什么 autoHideDuration 在第一个解决方案中停止工作

我在下面包含了一个带有错误行为的代码沙箱:

https://codesandbox.io/embed/dreamy-chaplygin-z2jr5nqry3?fontsize=14

预期结果:在 useSnackbar.js 文件中的 autoHideDuration 中设置的定义超时期限后,小吃店应自动关闭

标签: reactjsmaterial-uisnackbar

解决方案


你的事件有问题handleClose。您正在使用({ event, reason })一个参数的对象破坏,但它必须是两个单独的参数(event, reason)

这就是您的handleClose外观:


const handleClose = (event, reason) => {
    if (reason === "clickaway") {
        return;
    }

    setOpen(false);
};

推荐阅读