javascript - 在 setState 中等待服务器的响应
问题描述
我有一个聊天机器人,我想使用 ReactJS 来实现它。
我有这样的状态:
state={
currentMessage: {
content: '',
user: '',
},
messages: []
}
这个想法是用户可以messages[]
在状态中添加消息,并且也将添加来自服务器的响应。
到目前为止我有这个
addMessageHandler = () =>{
const message = this.state.currentMessage
console.log(message.content.length)
if(message.content.length > 5 && whiteSpaceValidation(message.content)){
this.setState(prevState =>({
messages: [...this.state.messages, this.state.currentMessage],
}), () => this.getResponseHandler()
)
}
}
getResponseHandler = () =>{
console.log('in handler', )
axios.post('http://localhost:5000/chatbot', {message: this.state.currentMessage.content})
.then(res => this.setState(prevState =>({
messsages: [...this.state.messages, res.data],
currentMessage: {
content: '',
user: ''
},
loading: false
}), () => console.log(res.data)))
}
userinputtet 消息被正确放入数组中,但在我的第一个回调函数中setState
,来自服务器的响应未正确放入消息数组中。
我已经尝试过一些可以正常执行的虚拟变量,但我似乎无法让服务器响应进入数组
当我记录res.data
它成功输出一个javascript对象
编辑:
解决方案
在您的第二个setState()
中,您的messages
属性有 3 s
。
推荐阅读
- random - 对三角形内的均匀随机点进行采样
- spring-boot - 如何在应用程序启动期间查看我的 Spring Boot 应用程序正在连接的数据库模式
- javascript - 在特定频道中发送消息 - 不起作用
- sql - Oracle - 将 UTC 日期转换为本地日期时间美国格式
- python - 在带有重复标题的csv中使用axis = 1的concat块(手动将多表excel保存到csv)
- java - Android Studio 中的 Python 脚本
- python-3.x - 创建变量(如果是命令行 Python,则为一行)
- python - 如何在上下文管理器中模拟 SQLAlchemy 会话
- kubernetes - 如何做 Kubernetes API 服务器负载测试?
- php - 尝试访问 videoProcessor.php 中 null 类型值的数组偏移量