因此,在重构我的基于类的聊天机器人组件以使用反应钩子的过程中,我遇到了一个使用状态钩子覆盖状态中的对象的问题。这导致只有机器人响应显示在用户界面中。当我与机器人聊天时,用户界面中显示的用户输入的闪光会被聊天机器人的响应覆盖。下面是代码:
export const Chatbot = () => {
const [messages, setMessages] = useState([]);
const [value, setValue] = useState("");
async function df_text_query(text) {
let says = {
speaks: "me",
message: {
text: {
text
}
}
};
setMessages([...messages, says]);
const res = await axios.post("/api/df_text_query", {
text,
userID: cookies.get("userID")
});
// Handles fullfillment routes for dialogflow
res.data.fulfillmentMessages.forEach(message => {
says = {
speaks: "bot",
message
};
setMessages([...messages, says]);
});
}
const handleChange = e => {
setValue(e.target.value);
};
const handleSubmit = e => {
e.preventDefault();
if (value !== "") {
const message = value.split();
df_text_query(message);
}
setValue("");
};
const handleButtonSend = async event => {
const eventText = event.target.innerText;
await setValue(eventText);
const message = value.split();
await df_text_query(message);
await setValue("");
};
return (
<div>
<div>chatbot code here</div>
</div>
);
};
可以这样在同一个异步函数中写入useState两次吗?如果不是,您建议我如何重构此代码,以便消息状态返回一个交替对象数组,例如:
[{says: {
speaks: "me",
message: {
text: {
text
}
}
}
},
{says: {
speaks: "bot",
message: {
text: {
text
}
}
}
},
{says: {
speaks: "me",
message: {
text: {
text
}
}
}
},
{says: {
speaks: "bot",
message: {
text: {
text
}
}
}
}
]```
Any answer would be very much appreciated. I've been stuck on this problem for a while now. If you need more information I'm happy to provide!
Cheers,
Jacks
试着这样做:
async function df_text_query(text) {
let says = [{
speaks: "me",
message: {
text: {
text
}
}
}];
const res = await axios.post("/api/df_text_query", {
text,
userID: cookies.get("userID")
});
// Handles fullfillment routes for dialogflow
let saysBatch = [says, ...res.data.fulfillmentMessages.map(message => ({
speaks: "bot",
message
}))];
setMessages([...messages, ...saysBatch]);
有一个带有正方形的板,其值取决于数组,它由hook处理。每次单击都会将值提高一,但不幸的是,它会将值提高两次(第一次单击除外)。 我的问题是: (1) 为什么会发生这种情况,(2)如何避免它,以及,一般来说,(3)有没有更好的方法来处理这样一个带有钩子的数组。 日志: 可以看出,从第二次点击开始,每次点击都会提高两次值。
当我多次调用同一个函数时,每次都传递了不同的参数,我会这样做: 有没有更方便的方法做到这一点呢?
一个trait中的静态函数可以调用同一trait中的另一个静态函数吗?假设我有以下特点: 那不行。代码不能在这里编译。 此外,没有类型让我使用完全限定的语法,如
问题内容: 我试图弄清楚如何使用argparser执行以下操作: 本身是一个子命令。我的目标是使脚本具有链接一系列子命令(成为其中一个命令)并按顺序执行它们的能力。在上面的示例中,它将执行构建,然后设置环境,然后再次执行构建。如何使用argparse完成此操作?我尝试了以下方法: 但是,似乎每次执行此操作时,它都会进入子命令并报告它不知道是什么。我尝试解析额外的内容,以便可以执行重复调用/链,但是
问题内容: 是否可以使用Golang一次声明多个变量? 例如,在Python中,您可以输入以下内容: 所有值均为80。 问题答案: 是的你可以: 您可以对内联分配执行类似的操作,但不太方便:
如果我有一个接受两个回调的函数的存根,当存根函数被调用时,我如何连接sinon.js来调用两个回调? 例如,这里有一个我想存根的函数,它接受两个函数作为参数: 我可以用sinon来称呼其中一个论点: 或者 但我似乎不能让两者都被召唤。如果我尝试: 或者 那么sinon只会调用第二个参数。如果我以另一个顺序连接它,那么sinon将调用第一个参数。然而,我希望两者都被一个接一个地称呼。