【发布时间】:2021-07-07 02:46:23
【问题描述】:
我正在处理一个要求,我必须在 React Web Chat 中实现自动完成功能。我创建并部署了一个 Azure Echo Bot,并为 UI 使用了 React Web Chat 和 directline。为了添加自动完成,我创建了一个示例话语列表,当用户键入内容时应该呈现这些示例话语。下面是我的 App.js 代码,其中我有来自 Bot 框架 webchat 的 redux 商店概念。
在这里,当我运行代码时,建议列表正在我的 UI 中呈现,但用于选择建议的点击事件不起作用,并且用户的输入也没有出现在聊天窗口中。
谁能帮我解决下面的问题。
import React, { useMemo,useEffect } from 'react';
import ReactWebChat, { createDirectLine, createStore } from 'botframework-webchat';
const items = [
"What is your name?",
"What is your job?",
"Who are you?"];
function App() {
const [listItems, setlistItems] = React.useState([]); //for creating list of suggested values
const [textValue, setTextValue] = React.useState(''); // for saving the suggested value when user clicks
const store = createStore({},
store => next => action => {
if (action.type === 'WEB_CHAT/SET_SEND_BOX') {
let value = action.payload.text;
const regex = new RegExp(`^${value}`, 'i');
let suggestions = items.sort().filter(v => regex.test(v));
setlistItems(suggestions);
setTextValue(textValue);
}
return next(action);
}
);
function suggestionSelected(value) {
setlistItems([]);
setTextValue(value);
}
const renderSuggestions = () => {
if (listItems.length === 0) {
return null;
}
return (
<div className="srchList">
<ul>
{listItems.map((item, idx) => <li key={idx} onClick={() => suggestionSelected(item)}>{item}</li>)}
</ul>
</div>
);
}
const directLine = useMemo(() => createDirectLine({ secret: '**************' }), []);
return (
<div>
<h1> Hello</h1>
<ReactWebChat
directLine={directLine}
store={store}
/>
<div>{renderSuggestions()}</div>
</div>
)
}
export default App;
【问题讨论】:
-
您可以链接到您用来帮助您在网络聊天中实现自动完成的任何页面吗?
-
我从下面的问题链接堆栈中获取了示例,其中底部提供了使用 Redux 和存储的自动搜索。 stackoverflow.com/questions/60223610/…
-
在用户点击任何自动建议的值后,我已使用以下代码更新网络聊天输入框的值。但显然这不起作用。你能帮我吗?
store.dispatch({ type: 'WEB_CHAT/SET_SEND_BOX', payload: { text: value, } }); -
作为对这个问题的更新,我们使用自定义文本框并将自定义文本框添加到机器人而不是网络聊天的默认文本框来实现这一点。我们已经在自定义文本框中实现了自动完成。
-
你想把它作为答案发布吗?
标签: reactjs react-redux botframework web-chat