首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >基于React19+Arco+Zustand5接入DeepSeek-V4网页版仿豆包/Kimi流式AI系统

基于React19+Arco+Zustand5接入DeepSeek-V4网页版仿豆包/Kimi流式AI系统

原创
作者头像
andy2018
发布2026-07-27 17:09:20
发布2026-07-27 17:09:20
20
举报
文章被收录于专栏:h5h5

经过一周快速研发,最新版react19.2+zustand5集成deepseek-v4-flash实战网页版ai流式对话助手。

[自研react19.2+deepseek-v4+openai智能流式ai模板](https://cloud.tencent.com/developer/article/2712737)

react19-webai支持亮色+暗黑主题、代码高亮/复制代码、深度思考链、katex公式、mermaid渲染、echarts图表展示,本地存储会话等功能。

运用技术

  • 开发工具:VScode
  • 技术框架:React^19.2.7+react-router^7.18.1
  • AI大语言模型:DeepSeek-V4-Flash + OpenAI
  • 组件库:@arco-design/mobile-react^2.39.1
  • 状态管理:zustand^5.0.14
  • markdown解析:react-markdown^10.1.0
  • echarts图表:echarts^6.1.0
  • 高亮插件:rehype-highlight^7.0.2
  • katex渲染:rehype-katex^7.0.1

项目特点

  1. 支持亮色+暗黑主题界面,收缩侧边栏
  2. 支持丰富markdown,代码高亮/复制代码/下载
  3. 支持深度思考链模式
  4. 支持输出Katex数学公式
  5. 支持渲染Mermaid图表(流程图/类图/饼图/甘特图)
  6. 支持Echarts图表展示
  7. 采用ArcoDesign组件库,保持UI风格一致性

项目结构目录

基于vite8.0构建创建react19项目模板,采用react hooks语法编码页面。

react环境变量配置

替换下项目根目录下.env里的apikey,即可体验ai流式对话功能。

项目入口配置App.jsx

代码语言:actionscript
复制
import { HashRouter } from 'react-router-dom'
import { appStore } from '@/store/app'

// 引入路由配置
import Router from './router'

function App() {
  const appState = appStore()
  appState.updateTheme()

  return (
    <>
      <HashRouter>
        <Router />
      </HashRouter>
    </>
  )
}

export default App

项目路由/布局结构

react-router v7配置

代码语言:actionscript
复制
import { lazy, Suspense } from 'react'
import { useRoutes, Navigate, Outlet } from 'react-router-dom'
import { Spin } from '@arco-design/web-react'

import { appStore } from '@/store/app'

// 引入路由页面
import Login from '@views/auth/login'
import Register from '@views/auth/register'
const Index = lazy(() => import('@views/index'))
const Aihub = lazy(() => import('@views/aihub'))
const Setting = lazy(() => import('@views/setting'))
const Error404 = lazy(() => import('@views/error/404'))

import Sidebar from '@/layouts/sidebar'

// 加载提示
const SpinLoading = () => {
  return <Spin tip='loading...' style={{width: '100%'}} />
}

// 延迟加载
const Lazyload = (children) => {
  return <Suspense fallback={<SpinLoading />}>{children}</Suspense>
}

// 路由鉴权验证
const RouterAuth = ({children}) => {
  const appState = appStore()
  return appState.isLogged ? (children) : (<Navigate to='/login' replace />)
}

// 路由占位模板
const RouterLayout = () => (
  <div className='rai__container'>
    <div className='rai__layout flexbox flex-col'>
      <div className='rai__layout-body flex1 flexbox'>
        {/* 侧边栏 */}
        <Sidebar />

        <div className='rai__layout-main flex1'>
          { Lazyload(<Outlet />) }
        </div>
      </div>
    </div>
  </div>
)

const routes = [
  {
    path: '/',
    element: <RouterAuth><RouterLayout /></RouterAuth>,
    children: [
      // 首页
      { index: true, element: <Index /> },
      // ai导航
      { path: '/aihub', element: <Aihub /> },
      // 我的模块
      { path: '/setting', element: <Setting /> },

      // 错误模块
      { path: '*', element: <Error404 /> },
    ]
  },
  // 登录/注册
  { path: '/login', element: <Login /> },
  { path: '/register', element: <Register /> },
]

侧边栏模板

代码语言:actionscript
复制
return (
  <>
    <div className={clsx('rai__sidebar', {'collapsed': collapsed})}>
      <Button className='rai__sidebar-collapse' shape='circle' onClick={handleCollapse}><div className='flex-c'><IconLayout style={{fontSize: 16}} /></div></Button>
      <aside className='rai__sidebar-aside flex1 flexbox flex-col'>
        <div className='rai__aside-head'>
          <div className='logo flexbox flex-alignc' onClick={()=>navigate('/')}><i className='iconfont ai-deepseek' style={{fontSize: 28}}></i><span className='fw-700 ff-ar' style={{fontSize: 16}}>react19-webseek</span></div>
          <div className='btn-create flex-c' onClick={handleCreate}><i className='iconfont ai-newchat'></i>新建对话<span className='shortkey'>(Ctrl+K)</span></div>
        </div>
        <div className='rai__aside-navwrap flexbox flex-col'>
          <div className={clsx('rai__aside-navitem', {'active': pathname == '/aihub'})} onClick={()=>navigate('/aihub')}><span className='icon'><IconCompass /></span><div className='title'>AI 导航</div></div>
          <Dropdown
            position='rt'
            droplist={
              <Menu style={{minWidth: 150, marginLeft: 10}}>
                <Menu.Item><div className='flexbox flex-alignc' style={{gap: 5}}><i className='iconfont ai-aisousou'></i>AI搜索</div></Menu.Item>
                <Menu.Item><div className='flexbox flex-alignc' style={{gap: 5}}><i className='iconfont ai-fanyi'></i>快速翻译</div></Menu.Item>
                <Menu.Item><div className='flexbox flex-alignc' style={{gap: 5}}><i className='iconfont ai-xiezuo'></i>帮我写作</div></Menu.Item>
                <Menu.Item><div className='flexbox flex-alignc' style={{gap: 5}}><i className='iconfont ai-tuxiang'></i>图像生成</div></Menu.Item>
                <Menu.Item><div className='flexbox flex-alignc' style={{gap: 5}}><i className='iconfont ai-aicode'></i>AI编程</div></Menu.Item>
              </Menu>
            }
          >
            <div className='rai__aside-navitem'><span className='icon'><IconCommand /></span><div className='title'>AI 技能</div><IconRight /></div>
          </Dropdown>
        </div>
        {/* 对话列表 */}
        <div className='rai__aside-sessions flex1 flexbox flex-col'>
          <div className='rai__aside-navwrap' style={{paddingTop: 0, paddingBottom: 0}}>
            <div className='rai__aside-navitem plain'><span className='icon'><IconHistory /></span><div className='title'>最近对话</div><i className='clean iconfont ai-clean' onClick={handleClean}></i></div>
          </div>
          <div className='rai__sessionwrap flex1'>
            <Rscroll size={5}>
              {sessions.length ?
                <ul className='rai__sessionlist'>
                  ...
                </ul>
                :
                <Empty icon={<IconEmpty style={{fontSize: 32}} />} description='暂无对话' />
              }
            </Rscroll>
          </div>
        </div>
        {/* 底部 */}
        <div className='rai__aside-navwrap'>
          ...
        </div>
      </aside>
    </div>
  </>
)

React19调用DeepSeek V4智能大模型

react19对接deepseek api实现流式输出多轮对话。

代码语言:actionscript
复制
const completion = await openai.chat.completions.create({
  // 多轮会话
  messages: multiConversation ? historySession() : [{role: 'user', content: editorValue}],
  // 对话模型(快速模式deepseek-v4-flash 专家模式deepseek-v4-pro)
  model: 'deepseek-v4-flash',
  // 是否深度思考
  thinking: {'type': thinkingEnabled ? 'enabled' : 'disabled'},
  stream: true, // 流式输出
  max_tokens: 8192, // 限制一次请求中模型生成 completion 的最大 token 数(默认使用 4096)
  temperature: 0.4, // 严谨采样 越低越严谨(默认1)
})

往期推荐文章

2026原创自研React19+Vite8+ArcoDesign+Zustand中后台管理系统框架模板

升级款vite8+vue3.5+arcoDesign网页端webOS桌面框架

自研Vite8+NaiveUI+Vue3+Echarts后台管理系统

全新研发Flutter3.41桌面版OS系统

uni-app+mphtml快速集成DeepSeek-V4智能ai应用

最新款flutter3.41 & dart3.11仿写抖音app

原创自研Flutter3.41+Dio+WindowManager打造桌面版AI问答系统

Flutter3.41实战AI:从零到一构建app版流式ai系统

Electron41 + Vite8打造流式输出客户端AI助手

Vite8.0+Vue3.5+Arco深度对接DeepSeek网页版AI智能助手

electron38-vite7-vue3os电脑端os管理系统

最新版electron38-vite7-admin电脑端中后台管理系统

Electron38+Vite7+Pinia3+ElementPlus客户端聊天程序

基于tauri2.8+vite7+vue3+element-plus仿QQ/微信聊天应用

tauri2.9-vite7-vue3admin客户端后台系统管理Exe模板

最新原创uniapp-vue3-osadmin手机版后台管理系统

最新研发uniapp+vue3仿微信app聊天模板

基于uni-app+vue3实战短视频+聊天+直播app商城

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 运用技术
  • 项目特点
  • 项目结构目录
  • react环境变量配置
  • 项目入口配置App.jsx
  • 项目路由/布局结构
  • React19调用DeepSeek V4智能大模型
    • 往期推荐文章
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档