reactjs - 一段时间后在 Next.js 中隐藏一个元素
问题描述
我有一个标题组件作为功能组件。我想在单击徽标文本时显示一个弹出窗口。一段时间后它应该会自动关闭。我使用钩子来显示弹出状态。但是设置状态函数在 setTimeout 函数中不起作用。如何解决这个问题?
import Link from 'next/link'
import style from './header.module.css'
const Header = () => {
const [popupOpen, setPopupOpen] = React.useState(false)
return (
<header className={style.header}>
<nav className={style.nav}>
<div
className={style.popupContainer}
onClick={() => {
setPopupOpen(!popupOpen)
console.log(popupOpen)
setTimeout(() => {
console.log(popupOpen)
setPopupOpen(!popupOpen)
console.log(popupOpen)
}, 1000)
}}
>
<span className={style.logo}>Logo</span>
<span
className={`${style.popupText} ${
popupOpen ? style.show : style.hide
}`}
>
Popup Text
</span>
</div>
<ul className={style.ul}>
<li>
<Link href='/'>
<a>.home</a>
</Link>
</li>
<li>
<Link href='/contact'>
<a>.contact</a>
</Link>
</li>
</ul>
</nav>
</header>
)
}
export default Header
控制台日志:
解决方案
让我建议,这与以下问题相同:
React - useState - 为什么 setTimeout 函数没有最新的状态值?
const _onClick = () => {
setPopupOpen(!popupOpen);
setTimeout(() => {
setPopupOpen(popupOpen => !popupOpen)
}, 2000);
};
推荐阅读
- java - 如何在 Java 中对函数外的代码使用条件编译?
- react-native - 如何在 React-Native 中检查对 Touch ID、Face ID、密码和模式锁定的支持
- sql-server - 如何将 SQL 命令转换为实体框架和 Lambda 表达式
- linux - 查找上次修改时间为 8 月的文件
- spring - Spring Cloud 文件系统后端占位符不起作用
- javascript - 尝试在提交时从表单上传数据和图像
- python - 为什么在使用 py2app 编译时会收到“RecursionError:超出最大递归深度”?
- ssl - 在 SOLR 6 上设置 SSL
- git - 获取 git log 以显示给定提交的合并提交者
- node.js - Rabbitmq:发布者在 Nodejs amqplib 中确认