reactjs - 反应 setState 不适用于 websocket
问题描述
我正在从 websocket 接收消息,之后我必须更新我的状态我已经过去了以前的问题并尝试向我的 setState 添加回调但它似乎仍然不起作用
constructor() {
super();
this.state = {
bus: [5, 6]}
}
render() {
const ws = new WebSocket("ws://-------:5055");
const navigation = this.props.navigation;
const state = this.state;
const props = this.props;
ws.onmessage = (e) => {
this.setState({
bus: e.data
},()=>console.log( state.bus)
);
};
请注意,如果我控制台记录收到的消息,即 e.data,它确实显示收到了消息,我知道 setState 是异步的,但如果我向它添加回调它不应该工作
解决方案
在此配置中,您将在组件的每个渲染上创建新的 websocket 连接。你必须移动连接到componentDidMount
钩子
componentDidMount() {
const ws = new WebSocket("ws://-------:5055");
const navigation = this.props.navigation;
const state = this.state;
const props = this.props;
ws.onmessage = (e) => {
this.setState({ bus: e.data }, () => console.log(state.bus));
};
}
render() {
// only JSX
return <div>...</div>
}
这将确保您只有一个连接。
推荐阅读
- amazon-web-services - 亚马逊如何使用域名在 ACM 中颁发 SSL 证书
- php - 检索邮递员在php中提交的json
- unity3d - 如何统一显示2个形状的相交边?
- java - 透明背景上的 setColor 未显示正确的颜色
- python - 条形图中的动态阈值线
- python - 为什么 lambda x: x % 2 表示奇数
- reactjs - 如何添加 favicon 以响应应用程序浏览器选项卡(重复)
- r-markdown - 更改 kableExtra 的 PDF 输出中的字体系列
- java - 如何在 Netbeans 8.2 中使用 XSD 1.1?
- node.js - NodeJs 和 MongoDB