componentDidMount() {
this.initSocket();
}
initSocket() {
// set user
socket.on('init', data => {
this.setState({
player: data.nickname,
}, () => {
alert(this.state.player);
});
});
}
1. Используйте
componentDidMount, вместо
componentWillMount.
2. Никогда не меняйте
state напрямую, для этого есть асинхронный метод
setState. Иначе ваш компонент не обновится.
3. Эту логику лучше вынести из компонента в
redux-saga или
redux-thunk.
4. В самом компоненте пока не получили пользователя показывайте лоадер:
render() {
const { user } = this.state;
if (!user) return <Loader />
return (
...
);
}