Этот пост о том, как лучше понять механизм React.component.При попытке передать событие от моего клиента на мой сервер с использованием сокета, связь работает, если я посылаю извне какую-либо функцию или в пространство определения над рендером, в компоненте моего React.Если я пытаюсь выполнить эмиссию в функции или в области видимости цепочки моего обещания, это не удается.Мне интересно, почему это работает или не работает, так как я определил элементы в действии, и мой тезис console.log возвращает мне их определение.
Вот мой snippet.js:
componentDidMount(){
console.log("on componentDidMount")
this.socket=io();
axios.get("https://api.ipify.org/?format=json")
.then((res) => {
// INSIDE THE PROMISE CHAIN'S SCOPE => FAILS TO EMIT ANYTHING
// I CAN'T FIGURE OUT WHY => BUT IT WORKS NOW.
// MAYBE A RESETTING I HAVE DONE WITHOUT HAVING SPOT THE CHANGEMENT
this.socket.emit("join", {ip:56565454654}, function(err){
});
})
// INSIDE A FUNCTION SCOPE IN componentDidMount() => FAILS TO EMIT ANYTHING WHEN CALL FROM PROMISE'CHAIN
// EDIT => WORKS => HAD TO BE BOUND
join(ip){
}
// OUTSIDE ANY FUNCTION SCOPE INSIDE componentDidMount() => EMIT SUCCEED BUT HARD TO HANDLE THE CODE FLOW SINCE IT ISN'T CALLED
this.socket.on("join",({message})=>{
})
}
// IN DEFINIITION AERA OUTSIDE componentDidMount() => EMIT SUCCEED AND CODE FLOW FRIENDLY
join(ip){
}
Так почему он работает или не работает?
Так что, в основном, следующий код работает хорошо:
A:
componentDidMount(){
console.log("on componentDidMount")
this.socket=io();
axios.get("https://api.ipify.org/?format=json")
.then((res) => {
console.log("ip adress: ", res.data.ip )
this.join(res.data.ip)
})
}
// IN DEFINIITION AERA OUTSIDE componentDidMount() => EMIT SUCCEED AND CODE FLOW FRIENDLY
join(ip){
console.log("this.socket.emit in join(): ", this.socket.emit)
this.socket.emit("join", {ip}, function(err){
if(err){
alert(err);
// Router.replace("/");
} else{
console.log("joinRoom succeed");
}
});
}
Любой намек был бы полезен, спасибо