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

React+AntDesign实现类似Chatgpt交互界面

 

以下是一个基于React和Ant Design搭建的简单ChatGPT风格前端交互界面代码框架示例,该示例实现了基本的用户输入、发送请求以及展示回复的功能。假设后端有一个模拟接口来处理请求并返回回复。

1. 项目初始化:
确保你已经安装了Node.js和npm。通过以下命令创建一个新的React项目:
npx create - react - app chat - ui
cd chat - ui
然后安装Ant Design:
npm install antd
2. 代码实现:

• App.js:
import React, { useState } from'react';
import { Button, Input, List } from 'antd';
import 'antd/dist/antd.css';

const App = () => {
    const [inputValue, setInputValue] = useState('');
    const [chatList, setChatList] = useState([]);

    const handleInputChange = (e) => {
        setInputValue(e.target.value);
    };

    const handleSend = async () => {
        if (inputValue.trim() === '') return;
        // 模拟请求数据
        const requestData = {
            userInput: inputValue
        };
        setChatList([...chatList, { role: 'user', content: inputValue }]);
        setInputValue('');
        try {
            // 模拟向后端发送请求,这里需要替换为真实的后端API地址
            const response = await fetch('/api/chat', {
                method: 'POST',
                headers: {
                    'Content - Type': 'application/json'
                },
                body: JSON.stringify(requestData)
            });
            if (response.ok) {
                const data = await response.json();
                setChatList([...chatList, { role: 'assistant', content: data.reply }]);
            } else {
                setChatList([...chatList, { role: 'assistant', content: '请求失败,请稍后重试' }]);
            }
        } catch (error) {
            setChatList([...chatList, { role: 'assistant', content: '网络错误,请检查网络' }]);
        }
    };

    return (
        <div style={ { padding: '20px' }}>
            <List
                dataSource={chatList}
                renderItem={(item) => (
                    <List.Item>
                        <strong>{item.role === 'user'? '你' : 'AI'}</strong>: {item.content}
                    </List.Item>
                )}
            />
            <Input
                placeholder="请输入问题"
                value={inputValue}
                onChange={handleInputChange}
                onPressEnter={handleSend}
                style={ { width: '80%', marginRight: '10px', display: 'inline - block' }}
            />
            <Button type="primary" onClick={handleSend}>发送</Button>
        </div>
    );
};

export default App;
上述代码中:

• 使用useState钩子来管理输入框的值inputValue和对话列表chatList。

• handleInputChange函数用于更新输入框的值。

• handleSend函数在用户点击发送按钮或按下回车键时触发,它先将用户输入添加到对话列表,然后模拟向后端发送请求并处理响应,将后端回复也添加到对话列表。

• List组件用于展示对话历史,Input组件用于用户输入,Button组件用于发送请求。

请注意,上述代码中的/api/chat是模拟的后端API地址,实际应用中你需要将其替换为真实的与ChatGPT模型交互的后端接口地址。并且,真实场景下还需要处理更多的细节,如身份验证、请求超时等。

ChatGPT是OpenAI开发的语言模型,其本身并没有前端交互界面,这里为你假设设计一个类似语言模型交互界面的前端交互流程,以帮助你理解。

1. 界面加载

• HTML 结构渲染:浏览器解析HTML文件,构建DOM树,确定页面布局结构,比如输入框、发送按钮、对话展示区域等基础元素的位置。

• CSS 样式应用:浏览器根据CSS规则,为各个HTML元素添加上对应的样式,像字体、颜色、间距等外观属性。

• JavaScript 脚本加载与初始化:浏览器加载JavaScript脚本文件,脚本开始执行初始化操作,例如获取DOM元素引用,绑定事件监听器等。

2. 用户输入

• 输入事件监听:在输入框元素上,通过JavaScript添加input或keydown事件监听器,实时监听用户输入。

• 输入内容处理:用户输入时,输入框的值实时更新,前端可进行简单的输入校验,如限制输入长度、过滤特殊字符等。

3. 发送请求

• 点击发送按钮或快捷键触发:用户点击发送按钮,或按下特定快捷键(如Enter键)时,触发发送请求的函数。

• 构建请求数据:将输入框中的内容作为请求数据,通常会包含用户的唯一标识、对话历史(如果有对话历史功能)等信息,按照后端接口要求的格式(如JSON)进行组装。

• 发送HTTP请求:使用fetch或XMLHttpRequest等技术,将构建好的请求数据发送到后端API接口。在请求过程中,可以显示加载状态,如在发送按钮上显示“正在发送”,或者在对话展示区域显示加载动画,告知用户请求正在处理中。

4. 接收响应

• 响应数据接收:后端处理完请求后返回响应数据,前端通过上述发送请求的机制接收数据。

• 响应解析:接收到的响应数据通常是JSON格式,使用JSON.parse()方法将其解析为JavaScript对象,方便后续处理。

5. 显示回复

• 对话展示区域更新:解析后的回复数据,按照一定的格式(如HTML)插入到对话展示区域,一般是在已有对话内容的下方添加新的对话记录,展示用户输入和模型回复。

• 滚动到最新消息:为了保证用户能实时看到最新的对话内容,自动将对话展示区域的滚动条滚动到最底部。

6. 错误处理

• 请求错误处理:如果在发送请求或接收响应过程中出现错误,如网络中断、后端服务故障等,捕获错误并向用户展示友好的错误提示信息,如“网络连接失败,请检查网络后重试” 。

• 响应数据异常处理:若接收到的响应数据格式不正确或包含错误信息,进行相应处理,例如显示错误原因,方便用户了解问题所在。

 


http://www.kler.cn/a/514420.html

相关文章:

  • vue3 通用svg组件
  • opengrok_windows_环境搭建
  • 快手SDK接入错误处理经验总结(WebGL方案)
  • es的date类型字段按照原生格式进行分组聚合
  • 我的创作纪念日,纪念我的第512天
  • 资料03:【TODOS案例】微信小程序开发bilibili
  • MySQL日期时间函数详解
  • 2.Spring-AOP
  • 探索 Stable-Diffusion-Webui-Forge:更快的AI图像生成体验
  • Halcon入门学习(机器视觉)
  • 机遇、挑战与融合创新之路
  • MySql字段的值是以逗号隔开的另一个表的主键关联查询
  • Oracle SQL: TRANSLATE 和 REGEXP_LIKE 的知识点详细分析
  • Spring Security 7 来啦
  • HTB:Remote[WriteUP]
  • AR智慧点巡检系统探究和技术方案设计
  • 微软 Win11 RP 22631.4825(KB5050092)预览版发布!
  • 哈夫曼树(构建、编码、译码)(详细分析+C++代码实现)
  • 纯前端实现表格中的数据导出功能-使用xlsx和file-saver
  • 【大数据】机器学习----------计算机学习理论
  • OpenHarmony OTA升级参考资料记录
  • 路由重分布
  • Hack The Box-Starting Point系列Vaccine
  • 【机器学习实战中阶】使用SARIMAX,ARIMA预测比特币价格,时间序列预测
  • LINUX下设置分离状态(Detached State)和未设置分离状态的主要区别在于线程资源的管理方式和线程的生命周期。以下是两种状态的对比:
  • 1.21学习