Javascript 焊剂和网片
我在Reactjs应用程序中使用了Flux和WebSocket,在实现过程中遇到了一些问题 问题:Javascript 焊剂和网片,javascript,websocket,reactjs,flux,Javascript,Websocket,Reactjs,Flux,我在Reactjs应用程序中使用了Flux和WebSocket,在实现过程中遇到了一些问题 问题: 假设我有一组actioncreator和一个用于管理WebSocket连接的存储区,并且连接是在actioncreator(open(token))中启动的,我应该将我的conn.emit放在哪里?我如何让其他操作访问我的连接对象,以便它们可以将数据发送到后端 我是否必须将其作为参数传递给视图中调用的操作(例如,TodoActions.create(conn,todo)),还是有更智能的方法
- 假设我有一组actioncreator和一个用于管理WebSocket连接的存储区,并且连接是在actioncreator(
)中启动的,我应该将我的open(token)
放在哪里?我如何让其他操作访问我的连接对象,以便它们可以将数据发送到后端conn.emit
- 我是否必须将其作为参数传递给视图中调用的操作(例如,
),还是有更智能的方法TodoActions.create(conn,todo)
import { WS_URL } from "./constants/ws";
import WSActions from "./actions/ws";
class WSClient {
constructor() {
this.conn = null;
}
open(token) {
this.conn = new WebSocket(WS_URL + "?access_token=" + token);
this.conn.onopen = WSActions.onOpen;
this.conn.onclose = WSActions.onClose;
this.conn.onerror = WSActions.onError;
this.conn.addEventListener("action", (payload) => {
WSActions.onAction(payload);
});
}
close() {
this.conn.close();
}
send(msg) {
return this.conn.send(msg);
}
}
export default new WSClient();
您应该有一个单例模块(不是存储或操作创建者),用于打开套接字并引导通信。然后,任何需要通过套接字发送/接收数据的操作创建者只需要模块并使用其通用方法 下面是一个快速而肮脏的未经测试的示例(假设您使用的是CommonJS): SocketUtils.js:
var SocketActions = require('../actions/SocketActions.js');
var socket = new WebSocket(...);
// your stores will be listening for these dispatches
socket.onmessage = SocketActions.onMessage;
socket.onerror = SocketActions.onError;
module.exports = {
send: function(msg) {
return socket.send(msg);
}
};
MyActionCreator.js
var SocketUtils = require('../lib/SocketUtils.js');
var MyActionCreator = {
onSendStuff: function(msg) {
SocketUtils.send(msg);
// maybe dispatch something here, though the incoming data dispatch will come via SocketActions.onMessage
}
};
当然,在现实中,你会做得更好,做得也不一样,但这让你感觉到你可能会如何构造它。你能展示/概述我如何创建这样一个单例吗?如果我使用ES6类,我是否应该在构造函数中放入
socket=new WebSocket…
,然后只导出实例化的类。到目前为止,我已经用我的代码更新了我的问题,如果它对其他人有用,并且如果我做错了什么,可以收到反馈。是的,理论上看起来不错!如果不行,请告诉我,我会帮你的。