我正在尝试使用来自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();
});
}
}