从socket.io接收的数据不会立即在状态中反映出来
P粉043566314
P粉043566314 2023-09-17 15:04:28
0
1
633

app.js接收到从服务器发送的数据(在控制台中显示),setState不会使用新数据刷新网页。在console.log("Received data queue:", data.queue)的行中,它也返回undefined。我期望它是一个特定的值,因为在console.log(data)的行中,它在“queue”键下有存储的值。

这是我的代码:

import React, { Component } from "react"; import { TransitionGroup, CSSTransition } from "react-transition-group"; import "./chat.css"; import "./styles.css"; import "./queue.css"; import Chat from "./chat"; import io from "socket.io-client"; class App extends Component { constructor(props) { super(props); this.state = { queue: [], instruction: "", user: "", hal: "", status: "waiting" }; } componentDidMount() { const socket = io("http://localhost:5000"); socket.on("connect", () => { console.log("Connected to the socket server"); }); socket.on("queueData", (data) => { console.log("Received data:", data); console.log("Received data queue:", data.queue); this.setState({ queue: data.queue }, () => { console.log(this.state.queue); }); this.setState({ instruction: data.instruction }, () => { console.log(this.state.instruction); }); // other attributes, user, hal, status ignored here for simplicity }); this.socket = socket; } componentWillUnmount() { this.socket.disconnect(); } renderData = () => { console.log("rendered queue", this.state.queue); if (this.state.queue === undefined) { return null; } return this.state.queue.map((task, index) => (
       
        
{task} {index === 0 && this.state.status === "working" && (
)}
)); }; render() { return (
{this.renderData()}
Instruction: {this.state.instruction}
); } } export default App;

我希望网页在接收到新数据时立即刷新。我已经在setState中加入了回调函数,但仍然无效。

P粉043566314
P粉043566314

全部回复 (1)
P粉617597173

在应用程序中使用socket.io时,由于多种因素,您可能会遇到在接收数据后更新状态时出现延迟的情况。例如socket.io的异步性质、状态管理问题、事件处理、React组件生命周期等等。

    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责声明 Sitemap
    PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!