javascript - 如何异步运行 useState

标签 javascript reactjs

const Navbar = () => {

    const [isModalOpen, setisModalOpen] = useState(true)
    const [isLogin, setisLogin] = useState(true)

    const onClose = () =>{
        setisModalOpen(false)
        if(!isLogin){
            setisLogin(true)
        }
    }
    return  (<Modal isOpen={isModalOpen} onClose={() => onClose()} >
    {!isLogin ? 
        <Register />
        :
        <Login setisLogin={() => setisLogin(false)} />
    }
    </Modal>)
}

当我调用 onclose 时,函数组件会使用登录值重新渲染一次,然后模式将关闭

使用 setTimeout 可以解决我的问题,但我认为使用 setTimeout 不是一个好的做法。

 const Navbar = () => {

    const [isModalOpen, setisModalOpen] = useState(true)
    const [isLogin, setisLogin] = useState(true)

    const onClose = () =>{
        setisModalOpen(false)
        setTimeout(() => {
            if(!isLogin){
                setisLogin(true)
            }
        }, 300);
   }
    return  (<Modal isOpen={isModalOpen} onClose={() => onClose()} >
    {!isLogin ? 
        <Register />
        :
        <Login setisLogin={() => setisLogin(false)} />
    }
    </Modal>)
}

最佳答案

有几种方法可以实现这一目标。我正在发布 useEffect 方式。

您可以使用 useEffect 并监听 isLogin(如果它发生更改,会触发 setisLogin() 函数)。

代码

const Navbar = () => {

  const [isModalOpen, setisModalOpen] = useState(true)
  const [isLogin, setisLogin] = useState(true)

  React.useEffect(() => {
     if(!isLogin){
        setisLogin(true);
     }
  },[isModalOpen])

  
  const onClose = () =>{
     setisModalOpen(false)
  }

 return  (<Modal isOpen={isModalOpen} onClose={() => onClose()} >

 {!isLogin ? 
    <Register />
    :
    <Login setisLogin={() => setisLogin(false)} />
  }
 </Modal>)
}

useState 和 setState 本质上都是异步的。

关于javascript - 如何异步运行 useState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70820590/

相关文章:

javascript - 使用 Object.assign() 时,React 组件不会重置状态?

javascript - :selected state on looped react component

javascript - 如何限制自定义指令可能的属性值?

javascript - Div 覆盖 Canvas ,鼠标悬停

javascript - Node.js 中的 Http.request

javascript - 如何解决 ReactJS 中帖子的增加和减少

reactjs - React JS - 如何更好地将 React 组件添加到 ReactDOM

reactjs - 如何在 react 传单中更改具体国家/地区的颜色/边框颜色

javascript - 将 iframe 放在弹出窗口中

javascript - 如何删除从 javascript var 转义的反斜杠?