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