首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果不双击元素- OnClick Next.js SSG,则无法运行Next.js事件。

如果不双击元素- OnClick Next.js SSG,则无法运行Next.js事件。
EN

Stack Overflow用户
提问于 2022-09-22 16:11:53
回答 1查看 25关注 0票数 0

除非第二次单击,否则onClick事件侦听器的所有内容都不会运行。我相信这与第一次点击时状态没有更新有关,但是我不知道如何解决这个问题。

我在SSG的每个页面上使用getStaticProps(),这可能与此有关。下面是其中一个事件的例子:

代码语言:javascript
复制
export default function Dropdown({ children, text}){
    const [open, setOpen] = useState(false)
    
    const handleClick = (e)=>{
        e.preventDefault()
           setOpen(!open)
    }
 


    return(
        <>
        <div className="relative w-full h-full" >
            <div  className="inline-flex rounded-md">
                    <button type="button"
                            onClick={(e)=>handleClick(e)}
                            className="inline-flex items-center px-3 py-2 border border-transparent text-sm leading-4 font-medium rounded-md text-gray-500 bg-white hover:text-gray-700 focus:outline-none transition">
                            {text}
                        <svg
                            className="ml-2 -mr-0.5 h-4 w-4"
                            xmlns="http://www.w3.org/2000/svg"
                            viewBox="0 0 20 20"
                            fill="currentColor"
                        >
                            <path fillRule="evenodd"
                                  d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z"
                                  clipRule="evenodd"/>
                        </svg>
                    </button>
            </div>
            <AnimatePresence>
                {open
                    ?
                    <motion.div
                        initial={{opacity: 0, scale: 0.95}}
                        animate={{opacity: 1, scale:1}}
                        exit={{opacity: 0, scale: 0.95}}
                        transition={{ease: 'easeInOut', duration: 0.2}}
                        className={`w-fit origin-top absolute z-50 mt-2 right-0 bg-white top-6 rounded-md shadow-lg`}
                        onMouseLeave={()=>{setOpen(false)}}
                    >
                        <div className={`rounded-md ring-1 ring-black ring-opacity-5`} >
                            {children}
                        </div>
                    </motion.div>

                    :<></>

                }
            </AnimatePresence>
        </div>
        </>
    )
}

我想了解一下这件事。我也尝试过动态导入,但这并没有修复任何问题。

我只和React一起工作了几年,但是以前从来没有发生过这样的事情。

EN

回答 1

Stack Overflow用户

发布于 2022-09-22 17:36:02

你可以试试

代码语言:javascript
复制
setOpen(prevState => !prevState)

所以您的setState操作将知道必须更新当前值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73817785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档