settings / features / slots / renderers 怎么选
定制界面有四个入口。本页说明它们各管什么,以及遇到一个需求时该用哪个。
分工
settings:文字、数字、开关。没有函数,没有界面内容。features:内置功能。开关、换位置、提供功能需要的函数(上传、赞踩回调、语音识别)。slots:聊天区 17 个固定位置,放什么由业务方决定。会话列表SessionList另有两个位置,见插槽。renderers:后端返回的某一类内容(业务卡片、工具、失败、系统提示、Markdown 元素)怎么显示。按需引入的 OpenUI 渲染与产物预览也通过renderers登记。
另有 onSend(发送前处理)、onEvent(事件)、onError(错误)三个回调;失败卡片文字通过 renderers.errors 的 renderDefault 覆盖。
四个判断问题
按顺序问,第一个回答「是」的就是答案:
四个都不是,多半是要在发送前改输入(onSend),或者这件事不能定制(见不能定制的部分)。
十个常见场景
两处容易选错
内容类的用 renderers,不要用 slots
「回答里显示一张订单卡片」容易想成往 message.footer 放一个组件,再从消息里找数据。这样做卡片的位置固定在消息末尾,历史回放时还要自己判断哪条消息有订单。
适合的做法是让后端(或适配器)把订单作为回答里的一块数据返回,用 renderers.parts 按类型登记组件。卡片按片段顺序显示;刷新后能否恢复,取决于历史是否保留相同数据与顺序。
判断标准:这块内容是回答的一部分,用 renderers;是界面上固定位置的功能入口,用 slots。
已有的功能用 features,不要自己在 slots 里再做一个
想把附件按钮换个位置,容易想成关掉内置的、自己在插槽里写一个上传按钮。这样拖拽、粘贴、大小限制、类型限制都要重新实现。
仅调整位置时使用 features.attachments: { upload, slot: 'composer.toolbarEnd' }。要放到 slot 支持的位置之外时写 slot: false,再把导出的内置组件放到需要的位置,见调整内置功能。
判断标准:chatkit 已有的功能只调整位置与开关,业务特有的功能才自己写。