Reactjs 使用Socket.io会话数据进行React.JS状态更新

Reactjs 使用Socket.io会话数据进行React.JS状态更新,reactjs,websocket,socket.io,Reactjs,Websocket,Socket.io,我正在尝试使用websocket中的数据更新react应用程序的状态,但问题是: 在我监视当前登录用户的视图中,状态只反映了倒数第二次更新,而不是最后一次更新。如果我刷新页面,数据(我正在传递一个当前的_url)会被更新,但是如果我从另一个页面导航到该页面,则会显示上一个url而不是当前url。我假设只有在组件呈现并显示旧状态之后,状态数组才会被更新 我尝试使用setState回调来调用forceUpdate(),但这似乎不起作用。任何帮助都将不胜感激。谢谢 class UsersLoggedI

我正在尝试使用websocket中的数据更新react应用程序的状态,但问题是:

在我监视当前登录用户的视图中,状态只反映了倒数第二次更新,而不是最后一次更新。如果我刷新页面,数据(我正在传递一个当前的_url)会被更新,但是如果我从另一个页面导航到该页面,则会显示上一个url而不是当前url。我假设只有在组件呈现并显示旧状态之后,状态数组才会被更新

我尝试使用
setState
回调来调用
forceUpdate()
,但这似乎不起作用。任何帮助都将不胜感激。谢谢

class UsersLoggedIn extends Component {
    constructor(props) {
        super(props);

        this.state = {
            usersLoggedIn: []
        }
    }
    getUsersLogged() {
        const socketIo = SocketIO();
        if (typeof socketIo === 'object') {
            socketIo.emit('getUsersLogged', (data) => {
                const usersLoggedIn = [];

                // groups the data from the socket by session id.
                for (let id in data) {
                    let temp = [];
                    for (let socketId in data[id]) {
                        temp.push(data[id][socketId]);
                    }
                    usersLoggedIn.push({
                        ...temp[0],
                        children: temp
                    });
                }
                this.setState({usersLoggedIn}, () => {
                    this.forceUpdate();
                });
            });
        }
    }


    componentDidMount() {
        // we need to pass data to the socket here.
        const socketIo = SocketIO();
        if (typeof socketIo === 'object') {
            socketIo.on('loadUserLogged', (data) => {
                this.getUsersLogged();
            });
        }
    }

您好,请尝试:
this.setState({usersLoggedIn:[…usersLoggedIn]})
由于在初始渲染后调用componentDidMount,因此预期状态更新将在初始渲染后发生render@ShubhamKhatri是的,我知道有一个初始渲染,但是,一旦状态更新,组件应重新渲染以反映新状态是否正确?至少是正常情况下,这里的问题似乎是函数在新数据传递到React状态之前完成并呈现。