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

时间:2019-10-25 11:53:20

标签: reactjs websocket socket.io

我正在尝试使用来自websocket的数据来更新React应用的状态,并且一切正常,但是问题是这样的:

在我监视当前登录用户的视图中,状态仅反映倒数第二次更新,而不是最后一次更新。如果刷新页面,则数据(我传递的是current_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();
            });
        }
    }

0 个答案:

没有答案