Обновление состояния React.JS с данными сеанса Socket.io - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь обновить состояние приложения реагирования данными из веб-сокета, и все это работает, но проблема заключается в следующем:

В представлении, где я наблюдаю за пользователями, вошедшими в данный момент в систему, состояниеотражает только последнее обновление, а не последнее. Если я обновляю страницу, данные (я передаю current_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();
            });
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...