Où devrait à long processus en cours d'exécution « en direct » dans une application + réagissez Redux?Où les processus de longue durée vivent-ils dans une application React + Redux?
Pour un exemple simple, considérons une classe qui envoie et reçoit des messages sur une websocket:
class WebsocketStreamer {
sendMessage(message) {
this.socket.send(…);
}
onMessageReceive(event) {
this.dispatch({
type: "STREAMER_RECV",
message: event.data,
})
}
}
Comment le cycle de vie de cette classe être gérés?
Mon premier instinct est de le garder sur le store
:
var stores = {
streamer: function(state={}, action) {
if (action.type == "@@INIT")
return { streamer: new WebsocketStreamer() }
if (action.type == "STREAMER_SEND")
state.streamer.sendMessage(action.message)
return state;
}
}
Mais, en dehors d'être un peu bizarre, il y a aussi aucun moyen pour le WebsocketStreamer
d'avoir accès à la fonction dispatch()
, et il casse chaud rechargement.
Une autre solution possible est de le garder dans un endroit global:
const streamer = new WebsocketStreamer();
Mais cela a des implications évidentes de testabilité, et les pauses rechargeant chaud aussi.
Alors, où un long processus en cours d'exécution en direct dans une application + réagissez Redux?
Note: Je me rends compte que cet exemple simple pourrait être construit avec seulement + magasins fournisseurs d'action. Mais je voudrais spécifiquement savoir où les processus de longue durée devraient exister dans des situations où ils existent.
Chris, j'ai trouvé que le stockage du client Pusher dans le magasin redux provoque beaucoup de problèmes avec le rechargement à chaud. Avez-vous vécu/surmonté cela? –
Je ne peux pas parler de ça, Steven. Je n'ai pas utilisé quelque chose comme cette dernière phase de preuve de concept. –