2026 React 流式输出 LLM 响应:SSE、状态管理与重连实践
在 AI 聊天、代码生成和文档总结应用中,等待模型一次性返回完整文本会让用户误以为页面卡住。更好的体验是让 React 前端逐字或按片段显示结果。2026 年构建这类功能时,重点不只是“能收到数据”,还包括协议选择、状态一致性、取消请求、异常恢复和成本控制。
先确定流式协议与接口格式
浏览器端常见方案是 Server-Sent Events(SSE)或基于 ReadableStream 的 HTTP 流。SSE 适合服务端持续发送文本事件,浏览器可以使用 EventSource;但当请求需要 POST、携带复杂 JSON 或自定义 Authorization 头时,直接使用 fetch 读取响应体通常更灵活。
以 OpenAI 兼容接口为例,请求通常包含 model、messages 和 stream: true。Claude 兼容接口也应以实际网关文档为准,不能假设所有模型的事件字段完全相同。前端应优先解析标准的 data 行,并处理结束标记,而不是把整个网络响应直接拼接到界面。
React 中读取 ReadableStream
核心流程是:创建 AbortController,发送 POST 请求,取得 response.body.getReader(),使用 TextDecoder 增量解码,再按换行拆分事件。由于一个网络数据块可能只包含半行 JSON,也可能包含多条事件,所以必须保留未完成的缓冲区。
- 检查 response.ok,失败时读取服务端错误信息。
- 使用 TextDecoder.decode(value, { stream: true }),避免多字节字符被截断。
- 识别 data: [DONE] 或供应商定义的结束事件。
- 把新增 delta 追加到消息状态,而不是每次覆盖完整文本。
- 组件卸载、用户点击停止或开始新对话时调用 controller.abort()。
状态上建议区分 input、assistantText、isStreaming、error 和 requestId。每次请求生成唯一 requestId,只有当前请求仍然有效时才允许更新状态,可避免用户快速连续提问时,旧响应覆盖新响应。
不要在每个 token 上无节制重渲染
模型输出速度较快时,按每个 token 调用 setState 会增加渲染次数。可以在浏览器动画帧或 20 到 50 毫秒窗口内合并增量,再批量更新 React 状态。消息列表使用稳定的 key,长文本则考虑虚拟化或限制历史消息数量。
Markdown 渲染也应延迟或节流处理。流式阶段可以先显示纯文本,结束后再完整解析 Markdown;这样既减少 CPU 消耗,也避免不完整代码块导致渲染器频繁报错。
错误、重连与安全边界
连接中断时,不要盲目自动重试整个请求,否则可能重复计费或产生重复内容。更稳妥的做法是保存已接收文本、展示“连接中断”,并允许用户手动继续或重新生成。若后端支持事件 ID,可依据最后事件恢复;否则只能重新请求,并明确告知用户。
API 密钥不应放在 React 打包产物中。生产环境应由自己的后端代理请求,后端负责密钥保管、限流、日志脱敏和额度控制。浏览器只接触你自己的短期会话凭证。与此同时,为输出内容设置最大 token、超时和请求大小限制。
低成本接入 59API
如果应用需要同时调用 Claude 和 GPT,59API 提供兼容 Claude Code、Codex 以及 OpenAI SDK 的 API 中转服务,基础地址为 https://api.59api.com。开发者可以按量使用 Opus、Sonnet、Haiku、Fable 和 GPT 模型,不必为低频项目预付固定套餐。其主打官方品质模型和较低中转成本,适合先验证产品,再根据真实用量优化模型选择。
接入时将 SDK 的 base URL 指向 59API,并按其文档配置密钥和模型名;不要仅凭模型名称猜测参数或流式事件格式。建议先用 curl 验证 stream: true 的实际返回,再接入 React。注册前也可以查看当前计费规则和推荐返利政策,便于估算长期成本。
上线前检查清单
- 确认移动网络下仍能持续显示内容。
- 测试取消、超时、429、5xx 和半截 JSON。
- 验证旧请求不会覆盖新请求。
- 记录首字节时间、完成时间、输入输出 token 与失败率。
- 通过后端代理保护密钥,并设置额度告警。
按照这些原则,React 流式 LLM 功能会从简单的演示代码变成可监控、可取消、可恢复且成本可控的生产实现。需要低价按量试用 Claude 或 GPT 的开发者,可以注册 59API,从一个小型流式聊天功能开始验证。
Prêt à commencer ?
Connectez Claude et GPT en quelques minutes aux prix les plus bas, sans bridage. Inscrivez-vous pour votre clé API.
Inscription gratuite