当前位置: 首页 > article >正文

HOW - 用户在前端页面长时间停留数据状态一致性保持方案

目录

  • 方案 1:轮询数据刷新
  • 方案 2:操作前二次校验
  • 方案 3:WebSocket 实时更新
  • 最终方案推荐

如果用户长时间停留在页面上,某些数据状态在后台已更新,而前端页面仍显示旧状态,此时提交操作可能会出错。为了解决这个问题,可以采用以下几种优化方案:

方案 1:轮询数据刷新

  • 每隔一段时间(比如 30s)重新拉取数据,保证状态与后端同步。

  • 使用 useSWRsetInterval 定期触发数据刷新。

    const { data, mutate } = useSWR('/api/items', fetcher, { refreshInterval: 30000 });
    

方案 2:操作前二次校验

  • 操作前 先请求一次最新状态,并与当前状态对比,如果不匹配,则提示用户刷新数据。

    const handleUpdateStatus = async (id: string, newStatus: Status) => {
      const latestItem = await fetch(`/api/item/${id}`).then(res => res.json());
      if (latestItem.status !== currentItem.status) {
        message.warning("状态已变更,请刷新后重试!");
        mutate(); // 触发数据刷新
        return;
      }
      await updateStatusAPI(id, newStatus);
      mutate();
    };
    

方案 3:WebSocket 实时更新

  • 使用 WebSocket 监听后端推送的状态变化,实时更新前端数据。

    useEffect(() => {
      const ws = new WebSocket("wss://your-api.com/status-updates");
      ws.onmessage = (event) => {
        const updatedItem = JSON.parse(event.data);
        mutate(); // 触发数据刷新
      };
      return () => ws.close();
    }, []);
    

最终方案推荐

如果数据变更不频繁,可选 方案 1 + 方案 2
如果是高频数据变更,建议采用 方案 3(WebSocket),实现更高效的实时同步。

这样能确保:

  • 按钮的可用状态受状态流转规则限制,避免误操作。
  • 用户长时间停留时,数据能保持较新,防止提交无效操作。

这种方式可以兼顾用户体验和数据一致性。


http://www.kler.cn/a/576656.html

相关文章:

  • MySQL复合查询深度解析:概念、类型与实战指南
  • Python可视化——地理空间型图表(自用)
  • HarmonyOS:基于hmrouter实现Page的生命周期监听
  • LLM | 论文精读 | GIS Copilot : 面向空间分析的自主GIS代理
  • 计算机毕业设计SpringBoot+Vue.js疗养院管理系统(源码+文档+PPT+讲解)
  • qt open3dBPA重建
  • Linux - 网络基础(应用层,传输层)
  • 即屋科技(深圳)有限公司-简介
  • CPENT、CEH、OSCP的对比分析
  • vue3.2.37源码调试步骤
  • vscode 查看3d
  • 编程语言介绍:Rust
  • Next.js 连接 Angthing llm 实现本地大模型的流式传输
  • Ubuntu搭建最简单WEB服务器
  • 【微知】命令行如何对Centos关机?如何完全关机?(shutdown -h now、poweroff; halt、init 0)
  • 「科大讯飞」正式加入 Karmada 用户组!携手社区共建多集群生态
  • Redis7——进阶篇(四)
  • 小程序中下载文件 Vue3 写法
  • 嵌入式开发之串行数据处理
  • OpenCV GrabCut 图像分割