vue3项目需用fetch实现grok sse流式响应,pinia管理消息状态并动态更新content,usescroll配合条件滚动锚定,气泡组件剥离data:前缀渲染markdown,css控制流式动画与交互禁用。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要在Vue3项目中接入Grok API,实现一个能实时显示AI逐字回复的对话界面,而不是等整段响应返回后再渲染。这要求前端必须正确处理流式数据、防止DOM频繁重绘、保持消息气泡的滚动锚定,并兼容Grok官方API的SSE格式。
初始化Vue3项目并安装依赖
用Vite创建最小化Vue3项目:npm create vite@latest grok-chat -- --template vue。进入目录后执行npm install。
安装必需依赖:npm install axios pinia @vueuse/core。其中@vueuse/core提供useScroll和useEventListener等实用组合函数,对滚动锚定至关重要。
【不要安装eventsource-polyfill】 Grok的SSE响应头明确要求Content-Type: text/event-stream,而现代浏览器原生EventSource已完全支持该协议,引入polyfill反而会干扰流式中断重连逻辑。
配置Grok API密钥与基础请求封装
在src/env.d.ts中补充类型声明:declare global { interface ImportMetaEnv { readonly VITE_GROK_API_KEY: string } }。
创建src/api/grok.ts,导出fetchStream函数:使用fetch而非axios,因为axios不原生支持SSE流式读取;设置headers为{Authorization: Bearer ${import.meta.env.VITE_GROK_API_KEY}};关键参数是{method: 'POST', body: JSON.stringify({model: 'grok-beta', messages: [{role: 'user', content: prompt}], stream: true})}。
响应体必须设为res.body.getReader(),不能用res.json()——后者会等待完整响应,彻底破坏流式特性。
构建流式消息状态管理(Pinia Store)
运行npm install pinia,然后在src/stores/chat.ts中定义useChatStore:
state包含messages: Message[](每个Message有id、role、content、isStreaming布尔值)、inputValue:string、isLoading:boolean;actions中addUserMessage直接push,addAIMessage则需初始化空字符串并标记isStreaming=true;最关键的是streamChunk(chunk: string)方法——它只更新最后一条AI消息的content += chunk,不触发新消息插入。
Vue 3 组合式 API 与
热门下载
相关下载
精品课程
共26课时 | 2.5万人学习
共30课时 | 2.4万人学习
共20课时 | 1.7万人学习
