跳到正文

前端实现与难点 ​

状态:未准备(作为全栈业务闭环与前端备选素材)

实现概览 ​

源码根目录:EinoTalk。路径均相对该目录。

  • React Router 组织登录、注册、聊天和管理页面,Ant Design 提供基础 UI。
  • Zustand 按认证、聊天、联系人、音视频和 UI 拆分 store。
  • Axios 封装业务请求,WebSocket service / hook 处理实时连接与事件。
  • 主要入口:frontend/src/App.tsx、frontend/src/stores/、frontend/src/services/websocket.ts、frontend/src/hooks/useWebSocket.ts。

难点与取舍 ​

1. 登录态与错误处理 ​

  • 具体问题与背景:多业务模块需要共享 token,登录过期或权限不足应保持一致行为。
  • 我的实现(候选,待确认):请求拦截器附加 Bearer token;响应处理区分 401 / 403,未认证时清理本地登录信息和 store 并跳转登录。
  • 备选方案:每个 API 重复处理;引入 token 自动刷新。
  • 选择理由与限制:集中处理基础错误;当前代码不能据此写成无感刷新 token,localStorage token 也需要讨论 XSS 风险。
  • 结果与验证方式:分别模拟 HTTP 状态码与业务 code,检查登录页跳转和 FormData 请求头。
  • 代码路径 / 证据:frontend/src/api/axios.ts、frontend/src/stores/useAuthStore.ts。

2. 实时消息与会话状态同步 ​

  • 具体问题与背景:接收消息时,当前窗口、会话摘要和未读状态可能需要一起更新。
  • 我的实现(候选,待确认):结合 WebSocket 事件和聊天 store 组织状态,区分服务端回显与用户输入。
  • 备选方案:定时轮询;前端先乐观插入再用服务端回执修正。
  • 选择理由与限制:需和服务端回显协议匹配,不能同时无条件本地追加造成重复;去重、重连恢复等能力需逐项核对后才写进简历。
  • 结果与验证方式:检查自己发出的消息只出现一次、切换会话后归属正确、历史与实时消息衔接。
  • 代码路径 / 证据:frontend/src/stores/useChatStore.ts、frontend/src/services/websocket.ts、internal/service/chat/dispatch.go。

待完善项 ​

  • 运行验证 store 与服务端协议的对应行为,补具体本人改动。
  • 全栈简历用一条说明前后端闭环即可;不重复展开两个项目的 WebRTC。
  • 不把“长列表虚拟化、离线补偿、消息重试、可靠回执”写成已实现,除非另行找到并验证实现。

理解机制,讲清取舍,用复盘检验掌握。