【问题标题】:React setState not working with websocket反应 setState 不适用于 websocket
【发布时间】:2020-06-30 07:14:04
【问题描述】:

我正在从 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 是异步的,但如果我向它添加回调,它不应该工作

【问题讨论】:

    标签: reactjs websocket


    【解决方案1】:

    在此配置中,您将在组件的每个渲染上创建新的 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>
      }
    

    这将确保您只有一个连接。

    【讨论】:

    • 哦,谢谢一大堆,哈哈,我觉得自己很愚蠢,没想到这一点,我确定这应该是解决方案,再次感谢:)
    猜你喜欢
    • 2021-12-30
    • 2021-08-12
    • 2020-11-22
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 2018-01-04
    相关资源
    最近更新 更多