Nie jestem pewien, czy problem polega na tym, w jaki sposób mam skonfigurowane gniazda - czy też niepoprawnie próbuję renderować dane z React.React and Socket.io: Potrafi uzyskać wstępne dane - ale widok nie jest aktualizowany po pojawieniu się nowego posta.
Mogę pomyślnie pobierać dane z mojego gniazda - ale nie aktualizuje się, gdy nowe dane są wysyłane na serwer. Moja intencja dotyczy stanu w React, aby automatycznie renderować nowe dane, które są zawsze aktywne z powodu połączenia przez gniazdo.
Oto moja aplikacja klient, który pobiera wiadomości z serwera i czyni je:
var Chat = React.createClass({
getInitialState: function() {
return {
messages: null
}
},
componentWillMount: function(){
var self = this;
socket.emit('getMessages');
socket.on('serverMessages', function (data) {
self.setState({messages: data})
});
},
render: function() {
var messages = this.state.messages ? <MessageList messages={this.state.messages}/> : null
return (
<div className="jumbotron">
{ messages }
<MessageForm submitMessage={this.submitMessage}/>
</div>
);
}
});
Tylko w przypadku, tutaj jest mój kod serwera, który emituje dane:
io.on('connection', function (socket) {
socket.on('getMessages', function (data) {
Message.find(function(err, messages){
socket.emit('serverMessages', messages);
})
});
});
Kod został napisany pośpiesznie w przeglądarce i nie został przetestowany, dlatego przepraszam, jeśli występują błędy literowe/logiczne. Kluczową wadą w oryginalnym przykładzie była brakująca obsługa zdarzeń dla 'getMessages' – kwcto
Dzięki @kwcto - Zaimplementowałem twoją opinię, ale nadal zachowuje się tak samo. Nowe wiadomości pojawiają się tylko po odświeżeniu strony. (Zaktualizowałem pytanie, aby odzwierciedlić nową implementację) – fresh5447