feat: 实现 Socket 触发的智能列表自动刷新功能(带防抖)
核心改动: - 扩展 NotificationContext,添加事件更新回调注册机制 - VirtualizedFourRowGrid 添加 forwardRef 暴露 getScrollPosition 方法 - DynamicNewsCard 实现智能刷新逻辑(根据模式和滚动位置判断是否刷新) - Community 页面注册 Socket 回调自动触发刷新 - 创建 TypeScript 通用防抖工具函数(debounce.ts) - 集成防抖机制(2秒延迟),避免短时间内频繁请求 智能刷新策略: - 纵向模式 + 第1页:自动刷新列表 - 纵向模式 + 其他页:不刷新(避免打断用户) - 平铺模式 + 滚动在顶部:自动刷新列表 - 平铺模式 + 滚动不在顶部:仅显示 Toast 提示 防抖效果: - 短时间内收到多个新事件,只执行最后一次刷新 - 减少服务器压力,提升用户体验 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -38,3 +38,21 @@ export const TOAST_CONFIG = {
|
||||
DURATION_ERROR: 3000, // 错误提示持续时间(毫秒)
|
||||
DURATION_WARNING: 2000, // 警告提示持续时间(毫秒)
|
||||
};
|
||||
|
||||
// ========== Socket 刷新防抖配置 ==========
|
||||
/**
|
||||
* Socket 新事件刷新防抖延迟(毫秒)
|
||||
*
|
||||
* 作用:避免短时间内收到多个新事件时频繁刷新列表
|
||||
*
|
||||
* 场景示例:
|
||||
* - 第 1 秒:收到新事件 → 延迟 2 秒刷新
|
||||
* - 第 2 秒:收到新事件 → 取消上次,重新延迟 2 秒
|
||||
* - 第 3 秒:收到新事件 → 取消上次,重新延迟 2 秒
|
||||
* - 第 5 秒:触发刷新 → 只发送 1 次 API 请求
|
||||
*
|
||||
* 推荐值:2000ms (2 秒)
|
||||
* - 太短(如 500ms)→ 仍可能触发多次刷新
|
||||
* - 太长(如 5000ms)→ 用户感知延迟过高
|
||||
*/
|
||||
export const REFRESH_DEBOUNCE_DELAY = 2000;
|
||||
|
||||
Reference in New Issue
Block a user