目前,当 socket.io 从我的服务器发出“gmessage”并且我的组件中的套接字捕获它时,我的整个状态都被替换了。
所以现在的流程是这样的:
我从组件发出一条消息,它发送到我的服务器,然后发送到 watson API。API 向我的服务器发送响应,服务器将响应发送给组件。
所以第一条消息创建了到 socket.io 的连接,然后第二个 socket.io 事件在同一个连接上被捕获。
有没有更好的方法来建立与 socket.io 的连接并处理这部分的发射和“on gmessage”部分?感谢您提前提供任何提示。我还是新手,所以你看到我应该做的任何不同都是有帮助的!
...
import {Launcher} from 'react-chat-window'
import io from 'socket.io-client';
import { getUser } from '../actions/userActions';
class Workshop extends Component {
constructor() {
super();
this.state = {
messageList: []
};
}
_onMessageWasSent(message) {
this.setState({
messageList: [message, ...this.state.messageList]
})
var socket = io.connect('http://localhost:5000');
socket.emit('message', { message });
var myThis = this
var myState = this.state
socket.on('gmesssage', function (data) {
console.log(data);
myThis.setState({
messageList: [{
author: 'them',
type: 'text',
data: data
}, ...myState.messageList]
})
})
}
render() {
return (
<Grid container className="DashboardPage" justify="center">
<Grid item xs={12}>
<div>Welcome to your Workshop</div>
<TeamsTaskLists />
</Grid>
<Launcher
agentProfile={{
teamName: 'Geppetto',
imageUrl: 'https://geppetto.ai/wp-content/uploads/2019/03/geppetto-chat-avi.png'
}}
onMessageWasSent={this._onMessageWasSent.bind(this)}
messageList={this.state.messageList}
showEmoji
/>
</Grid>
);
}
}
const mapStatetoProps = state => ({
user: state.user
});
export default connect(
mapStatetoProps,
{ getUser }
)(Workshop);