Ich bin mir nicht sicher, ob das Problem darin besteht, wie ich meine Sockets eingerichtet habe - oder ob ich falsch versuche, die Daten mit React zu rendern.
Ich kann erfolgreich Daten mit meinem Socket abrufen - aber es gibt keinen Update-Zustand, wenn neue Daten auf dem Server veröffentlicht werden. Meine Absicht ist, dass der Zustand in React automatisch neue Daten rendert, die wegen der Socket-Verbindung immer live sind.
Hier ist meine Client-App, die Nachrichten vom Server erhält und sie rendert:
%Vor%Nur für den Fall hier ist mein Server-Code, der Daten ausgibt:
%Vor% Von jetzt an greifen Sie "nur" Daten vom Server, sobald die Komponente geladen wurde. Um etwas mehr "Echtzeit" zu erhalten, wollen Sie entweder den Server mit der gleichen emit
-Anweisung anpingen, die Sie regelmäßig angegeben haben (was die Verwendung von Websockets vereitelt, wirklich, Sie könnten Long-Polling verwenden) Server sendet regelmäßig neue Daten an alle Clients.
Sie können ENTWEDER tun:
Hinweis: Ich habe dies zunächst in meine Antwort eingefügt, weil ich gesehen habe, dass das OP "polling" war, als der Controller geladen wurde. Ich habe nicht darauf geklickt, dass dies möglicherweise der Fall ist, da der Controller möglicherweise nicht mit dem WebSocket geladen ist, so dass das Senden von Daten über die Verbindung hier möglicherweise nicht funktioniert. Mein Schlechter.
Ersetzen Sie socket.emit('getMessages')
durch etwas, das den Websocket regelmäßig nach Daten abfragt:
ODER
Verfolgen Sie alle Clients über ein Client-Array und löschen Sie sie, wenn ihre Sitzung beendet ist.
%Vor%Führen Sie diesen Code aus, wenn Sie neue Nachrichten aus der Datenbank / dem Datenspeicher übertragen müssen:
%Vor% Ihr Servercode wird nur beim ersten Socket connection
ausgelöst.
Server:
%Vor%Kunde:
%Vor% Basierend auf der Namenskonvention scheint es auch, dass Ihre Message.find()
eine einzelne Nachricht zieht. Ich würde empfehlen, die Beschriftung zu verdeutlichen, um die Kardinalität anzupassen.
Könnte es aufgrund der componentWillMount-Lebenszyklusmethode möglich sein? Könnten Sie stattdessen den ComponentDidMount ausprobieren?
Es sieht so aus, als würde der Rendervorgang die Statusaktualisierung anzeigen, aber nur einmal ausgeführt, obwohl die Statusänderung gemäß facebook .