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