我实现了一个Dialog组件,它显示一些状态变量的值.

Dialog关闭时,状态变量重置为默认值.问题是,尽管Dialog人在不到一秒的时间内就结束了比赛,但仍然有足够的时间看到文本发生了变化.

有没有办法阻止文本更改,直到Dialog真正关闭?在将其他状态变量重置为默认值之前,我try 先将dialogOpen状态变量设置为false,但没有帮助,因为它发生得太快,并且无论如何都会对状态变化做出react .

<Dialog
    open = {dialogOpen}
    onClose = {() => handleDialogClose()}
    ... />

handleDialogClose():

const handleDialogClose = () =>
{
    setDialogOpen(false)
    setStateVariables(DEFAULT_VALUES)
}

我认为这个问题对更多的组件来说是普遍的,而不仅仅是Dialog,因为它也会出现在Snackbar个组件上的文本中.所有这些问题的总体解决方案都是最好的,但任何方法都会有所帮助.

编辑:Dialog使用Fade转换,其中timeout.exit延迟约为200ms.根据@technophyle下面的回答,使用setTimeout()延迟更新状态变量是有效的.传递到setTimeout()的延迟可以是0,额外的时间仍然足以防止看到变化.

推荐答案

如果Dialog组件有CSS转换动画,这是一个需要优雅解决的棘手问题.

如果您知道过渡持续时间,有一个解决方案(虽然不太好):

const handleDialogClose = () =>
{
    setDialogOpen(false)
    setTimeout(() => {
        setStateVariables(DEFAULT_VALUES)
    }, TRANSITION_DURATION_MS)
}

Reactjs相关问答推荐

在一个地方调用函数会影响其他地方调用该函数

如何避免react 使用ESLINTreact 挂钩/穷举-deps进行第一次呈现

在动态React组件中删除事件侦听器

子路径上未定义useMatches句柄

用于获取带有事件处理程序的API的动态路由

StrictMode+SetInterval=双重渲染(即使使用useEffect清理)

无法在下一个标头上使用 React hooks

在reactjs中刷新页面时丢失状态值

如何管理组件列表的复杂状态? (Nextjs/ReactJS)

显示我是否加入聊天应用程序时出现问题

从ReactDataGridtry 将数据传递给父组件

当`useSelector`回调中的属性值更新时,将会使用更新后的值吗?

CORS策略:对预检请求的响应未通过访问控制判断:没有Access-Control-Allow-Origin

我可以更改 styled() 中的响应吗? (MUI v5)

DatePicker MUI 如何在日历左侧显示清除文本

如何通过 React JS 中的映射将新元素添加到对象数据数组中

getAttribute 函数并不总是检索属性值

为什么 React 会多次调用我的应用程序的某些函数?

如何用实际的br标签替换axios响应中的br标签?

在react 钩子中将数组添加到数组状态给出一个数字