You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用React Hooks实现弹窗模态框仅显示一次

用React Hooks结合localStorage实现弹窗仅显示一次

完全可以用React Hooks实现这个需求,核心思路是通过localStorage记录用户是否已经看过弹窗,页面加载时根据存储的状态决定是否显示弹窗,关闭弹窗时同步更新localStorage的记录。

修改后的实现代码如下:

import { useState, useEffect } from 'react';

const YourComponent = () => {
  // 惰性初始化弹窗状态:无本地记录则默认显示,有记录则不显示
  const [showModal, setShowModal] = useState<boolean>(() => {
    const hasSeenModal = localStorage.getItem('hasSeenModal');
    return !hasSeenModal;
  });

  // 弹窗关闭时同步记录到localStorage
  useEffect(() => {
    if (!showModal) {
      localStorage.setItem('hasSeenModal', 'true');
    }
  }, [showModal]);

  return (
    <ModalIsContractor
      showModal={showModal}
      setShowModal={setShowModal}
    />
  );
};

关键逻辑说明

  • useState惰性初始化:传入函数而非直接值,避免每次组件渲染都读取localStorage,提升性能。读取hasSeenModal标记,不存在则返回true(显示弹窗),存在则返回false(不显示)。
  • useEffect状态同步:监听showModal的变化,当弹窗被关闭(状态变为false)时,往localStorage存入标记,确保下次页面加载时不会再触发弹窗。

额外提示

如果需要重置弹窗的显示状态,只需在浏览器控制台执行localStorage.removeItem('hasSeenModal'),下次加载页面时弹窗会再次自动显示。

内容的提问来源于stack exchange,提问作者Joao Vitor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 09:39:22