React AntDesign 聊天机器人 阿里ChatUI使用

使用阿里的antDesignPro开发了前端项目,现在根据需求进行了客户对话框的开发,找了三个组件。

【React】基于Antd 制作的纯前端客服机器人_不忘初心,坚定道路!-CSDN博客_react 客服

Hello from React-chatbot-kit | React-chatbot-kit

最后发现阿里开源的ChatUI组件好看,有“比较”前的组件文档。所以就开始根据ChatUI开发。当然以上才材料也有很多借鉴的地方,三个组件可以根据需求自己融汇贯通,相互融合来用。

ChatUI官网ChatUI。基本使用情况按照官方使用的直接在React项目中配置就可以

ChatUI的基本组成如图。这个我认为挺重要的,出处是阿里 ChatUI 开源:让对话美而简单_web前端开发-CSDN博客,我认为是阿里的人写的。

在官方的文档中没有详细的对“Chat对话容器”组件构成的构成有详细的介绍,所以下面的图的名字其实也决定了各个属性的名字。

官方的Props描述相比与ant design 组件的描述也是否的简单。示例也就第一个,所以每个属性的使用得自己去摸索。

问题

1、根据官方文档,引入ChatUI后,发现官方提供的SVG小图标没有显示出来。如图

橘黄色的地方应该有图标 的但是没有。仔细翻一下官方的“快速上手”中有一句话:

原来需要单独引用一下这个js文件。但是在react中如何使用这个html标签呢,。自己可以试一下自己的方法,。我是直接将这个文件下载下来,放到项目中,之后直接引用。这也是script的使用方法。引用之后的效果就是这个。

为啥不能直接将图标的文件放到整个npm包里呢,,,我有点不能理解。

使用

参数类型默认值说明
wideBreakpointstring宽屏断点
navbarobject导航栏配置
renderNavbarfunction导航栏渲染函数,会覆盖 navbar
loadMoreTextstring加载更多文案
renderBeforeMessageListfunction在消息列表上面的渲染函数
messagesRefobject消息列表 ref
onRefreshfunction下拉加载回调
onScrollfunction滚动消息列表回调
messagesarray[]消息列表
renderMessageContentfunction消息内容渲染函数
quickRepliesarray快捷短语列表
quickRepliesVisibleboolean快捷短语是否可见
onQuickReplyClickfunction点击快速回复回调
onQuickReplyScrollfunction快捷短语的滚动回调
renderQuickRepliesfunction快捷短语渲染函数,会覆盖 quickReplies
composerRefobject输入区 ref
textstring''输入框初始内容
placeholderstring'请输入...'输入框占位符
onInputFocusfunction输入框聚焦回调
onInputChangefunction输入框更新回调
onInputBlurfunction输入框失去焦点回调
onSendfunction发送消息回调
onImageSendfunction输入框粘贴图片后的回调
inputTypeenum: text | voicetext输入方式
onInputTypeChangefunction输入方式切换回调
recorderobject{}语音输入配置
toolbararray[]工具栏配置
onToolbarClickfunction工具栏点击回调
onAccessoryTogglefunction工具栏打开/关闭回调
rightActionobject输入框右边图标按钮配置
Composerelement输入组件

先复制一份ChatUI的Props,先来介绍一下Composer

Composer

这个是最上面图中的输入框和输入按钮的部分,使用这个属性后,会覆盖chat控件,要求输入的属性是element,这个其实是比较好理解的,就是

,但是自己来进行输入框画的时候,我遇到一个问题就是自己定义的input的没有办法在输入完成后自动再次获取input输入焦点,导致输入完-》回车-》鼠标再次选择input-》输入完...........。找了找原因是因为每次执行完

appendMsg

后,整个组件又进行了一次构造。(我是通过在整个组件函数开始的位置进行console.log,每次appendMsg后,都会重新执行console,而使用input重新获取焦点,必须通过

const inputRef = React.useRef(null);

导致每次input后,重新执行这个方法,永远获取不到input焦点)我也不知道自己结论是否是正确的。就因为我发获取input焦点,所以放弃了composer自定的想法。

贴一下不用的代码,可能之后使用Form表单会使用到,此代码与本次ChatUI讨论无关

//自定义的输入框内容。不适用于这个。在每次发送请求的时候,都会重新刷新整个空间,导致声明的文本框无法获取到对应的ref映射,从而在对话的时候无法获取到输入框焦点
    const formRef = React.createRef();
    const inputRef = React.useRef(null);
    function inputDiv() {
        return (
           <div style={{display:'flex'}}>
               {/*<Input style={{display:'flex'}} className={styles.footInput} placeholder={'有问题,找小财'} onChange ={event => handleInputName(event)} />*/}
               {/*<Button onClick={()=>onCommit()}>提交</Button>*/}
               <Form
                   ref={formRef}
                   name="basic"
                   className={style.InputForm}
               >
                   <Form.Item
                       name="info"
                       className={style.InputForm}
                       style={{marginBottom:0}}
                   >
                       <Search
                           ref={inputRef}
                           className={style.InputForm}
                           placeholder="请输入员工姓名或邮箱前缀"
                           enterButton="发送"
                           onSearch={onCommit}
                           onChange={(value) => handleInputName(value.target.value)}
                           // className={styles.searchTop}
                       />
                   </Form.Item>
               </Form>

           </div>
        )
    }
    const handleInputName = (value)=>{//输入过程中变化的信息时展示的,
        console.log('输入的信息=',value);
        // setInputValue(value);
    };
    const onCommit = (value) =>{//点击回车时调用的
        handleSend('text',"123");
        console.log('1');
        // console.log('value输入框的信息的是=',value);
        // formRef.current.resetFields();//重置输入框
        // console.log('输入框自己的 rel==inputRef==',inputRef);

    };

navbar

组件用于使用Chat可用的header位置的渲染信息。看一下描述

收入参数是object。object?????是什么样的对象呢,从官方例子里只有title

navbar={{ title: '智能助理' }}

当然对于object肯定还有别的参数,具体的属性名字文档并没有提供,。我们只能通过看代码来解决了。自己找了一下,发现了其他参数名

logo:由于中间显示图标,输入后会覆盖title
leftContent:导航栏左侧内容渲染,其中包括icon与onclick。icon直接输入文档实例中展示的名字ChatUI。onclick是点击图标后的点击事件。

2021.12.8

 right侧可以直接使用type是typing来进行打印“输入样式”

在安装的node_modul中找到chatUI的核心包,里面hooks是useXXXX方法,其中userMessages里的

可以使用deleteMsg('id')来删除右侧的“输入样式”内容 

to be continue......

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值