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

《60天AI学习计划启动 | Day 38: 多会话 多 Tab 同步(前端层)》

Day 38:多会话 & 多 Tab 同步(前端层)

学习目标

  • 设计 多会话模型:当前会话 + 会话列表(标题/摘要/时间)
  • 掌握 利用 localStorage + storage 事件 做多 Tab 状态同步
  • 实现 简单的会话新建 / 重命名 / 归档逻辑

核心知识点

  • 多会话数据模型

    • Session{ id, title, updatedAt, archived }
    • SessionMessagesRecord<sessionId, Message[]>
    • Store 里需要:currentSessionId + sessions[] + messagesBySession
  • 多 Tab 同步

    • 写入:每次会话/消息变化 → localStorage.setItem('ai_sessions', JSON.stringify(...))
    • 监听:window.addEventListener('storage', handler),对同一域其他 Tab 生效
    • 注意:当前 Tab 改变时也会写 localStorage,但 storage 事件不会在当前 Tab 触发

实战作业(附代码)

  • 作业 1:多会话 TS 类型
export interface Session {id: stringtitle: stringupdatedAt: numberarchived?: boolean
}export interface Message {id: stringrole: 'user' | 'assistant'content: stringcreatedAt: number
}export interface SessionState {sessions: Session[]currentSessionId: string | nullmessagesBySession: Record<string, Message[]>
}
  • 作业 2:多 Tab 同步 hook(简化版)
import { useEffect } from 'react'
import type { SessionState } from './types'const STORAGE_KEY = 'ai_chat_sessions'export function saveStateToStorage(state: SessionState) {localStorage.setItem(STORAGE_KEY, JSON.stringify(state))
}export function loadStateFromStorage(): SessionState | null {const raw = localStorage.getItem(STORAGE_KEY)if (!raw) return nulltry {return JSON.parse(raw)} catch {return null}
}export function useMultiTabSync(state: SessionState,setState: (s: SessionState) => void
) {// 初始化:加载本地数据useEffect(() => {const stored = loadStateFromStorage()if (stored) setState(stored)}, [setState])// 本 Tab 变化时写入 localStorage(可加节流)useEffect(() => {saveStateToStorage(state)}, [state])// 监听其他 Tab 的变更useEffect(() => {const handler = (e: StorageEvent) => {if (e.key !== STORAGE_KEY || !e.newValue) returntry {const next = JSON.parse(e.newValue) as SessionStatesetState(next)} catch {}}window.addEventListener('storage', handler)return () => window.removeEventListener('storage', handler)}, [setState])
}
  • 作业 3:新建 / 重命名 / 归档会话 helpers
export function createSession(title = '新对话'): Session {return { id: crypto.randomUUID(), title, updatedAt: Date.now() }
}export function renameSession(s: Session, title: string): Session {return { ...s, title, updatedAt: Date.now() }
}export function archiveSession(s: Session): Session {return { ...s, archived: true, updatedAt: Date.now() }
}

明日学习计划预告(Day 39)

  • 主题:Agent 执行过程可视化
  • 方向
    • 展示 Agent 的「思考 → 工具调用 → 观察 → 最终回答」步骤
    • 设计一个简单的“执行轨迹”时间线组件
http://www.jsqmd.com/news/104165/

相关文章:

  • 传统网页存档vs互联网档案馆:效率对比分析
  • 如何用AI一键生成Jupyter Notebook环境配置脚本
  • 企业级Python环境部署实战 - 官方源的正确使用
  • CMHHP实战:构建智能慢性病管理系统
  • 3步快速解决Windows安装配置错误
  • Promise.js在电商网站支付流程中的实战应用
  • 2025年年终伺服压机推荐:从技术参数到服务生态的全方位横评,附5款高适配性型号清单 - 品牌推荐
  • 工程优化- Tenacity库用于重试机制及使用示例
  • AI如何解决PDF预览难题?快马平台一键生成解决方案
  • torch.where vs numpy.where:性能对比全解析
  • 传统VS现代:EasyPlayer开发效率提升300%的秘密
  • EmotiVoice与语音唤醒技术结合的智能家居场景设想
  • 效率翻倍:一键切换工作/娱乐分辨率方案
  • 2025年无人机探测设备制造企业权威推荐榜单:无人机反制模块/无人机侦测反制设备/无人机管制设备源头厂家精选 - 品牌推荐官
  • 1小时搞定:用await快速开发天气查询CLI工具
  • LobeChat节日营销专题页内容策划
  • 再次提醒下本周六日参加考研的人!
  • AI写论文的软件有哪些?实测11款AI论文工具,AI效率与低AI率兼得! - 掌桥科研-AI论文写作
  • 告别传统测速:AI如何将网络诊断效率提升10倍
  • 2025年沥青搅拌设备源头厂家权威推荐榜单:沥青搅拌站/温拌泡沫沥青设备/沥青混凝土搅拌站源头厂家精选 - 品牌推荐官
  • 互联网档案馆使用指南:小白也能懂的历史网页查询
  • 垃圾收集器与内存分配策略
  • GUI Agent vs 传统UI开发:效率提升300%的秘密
  • 电脑新手必看:Windows安装失败怎么办?
  • 低成本打造专属声优!EmotiVoice声音克隆实测分享
  • 2025年12月电线/防火/控制电缆厂家推荐指南:五家企业实力铸就品质之选 - 深度智识库
  • 2025年高精度大理石量具品牌推荐:大理石量具角尺靠谱厂商有 - mypinpai
  • 零基础教程:图解Linux安装Python全流程
  • UG\NX二次开发,根据对称面计算对称向量对称点的方法
  • 1小时搭建:基于Windows Server 2016的测试环境原型