跨组件和存储使用的单一 websocket 连接
Single websocket connection to use across components and store
我有一个存储来自服务器的所有数据的 mobx 存储。
// stores.js
class User {
@observable userInfo = null;
@observable webSocketConnected = false;
}
class Trend {
@observable latest_trends = null;
}
我有一个组件可以通过 websockets 将用户输入发送到服务器。
@inject('UserStore') @observer
export default class Editor extends React.Component {
componentDidMount() {
socket = new WebSocket(newURL);
}
sendText = () => {
// socket.send(...) and update to the store
}
render() {
return (
<View style={styles.container}>
...
<TextInput
value={this.state.text}
...
style={styles.text}/>
</View>
)
}
}
我有另一个组件可以对用户的评论进行投票,我想通过 websockets 更新到服务器。
@inject('TrendStore') @observer
export default class Editor extends React.Component {
updateComment = () => {
// socket.send(...)
}
render() {
return (
<TouchableOpacity onPress={this.updateComment}>
<Icon/>
</TouchableOpacity>
)
}
}
如何创建一个 WebSocket 连接,以便我可以将它用于我的所有商店和组件?
您将创建一个 websocket 服务 class,该服务将传递给需要访问 websocket 的每个商店的构造函数。在程序的主文件中,您初始化所有存储并将它们提供给组件。
const webSocketService = new WebSocketService();
const userstore = new UserStore(websocketService);
const trendStore = new TrendStore(websocketservice);
const stores = { userStore, trendStore };
...
<Provider {...stores} >
...
</Provider>
WebSocketService 可以有像
这样的方法
发送(消息)
registerEventListener(事件,侦听器)
因此,您为每个商店提供了相同的 websocketService 实例。
提示:不要在组件中编写您的发送逻辑或任何其他业务登录。向特定商店添加一个方法,例如 sendMessage(message) 并从您的组件调用此方法。
希望这能回答您的问题。
我有一个存储来自服务器的所有数据的 mobx 存储。
// stores.js
class User {
@observable userInfo = null;
@observable webSocketConnected = false;
}
class Trend {
@observable latest_trends = null;
}
我有一个组件可以通过 websockets 将用户输入发送到服务器。
@inject('UserStore') @observer
export default class Editor extends React.Component {
componentDidMount() {
socket = new WebSocket(newURL);
}
sendText = () => {
// socket.send(...) and update to the store
}
render() {
return (
<View style={styles.container}>
...
<TextInput
value={this.state.text}
...
style={styles.text}/>
</View>
)
}
}
我有另一个组件可以对用户的评论进行投票,我想通过 websockets 更新到服务器。
@inject('TrendStore') @observer
export default class Editor extends React.Component {
updateComment = () => {
// socket.send(...)
}
render() {
return (
<TouchableOpacity onPress={this.updateComment}>
<Icon/>
</TouchableOpacity>
)
}
}
如何创建一个 WebSocket 连接,以便我可以将它用于我的所有商店和组件?
您将创建一个 websocket 服务 class,该服务将传递给需要访问 websocket 的每个商店的构造函数。在程序的主文件中,您初始化所有存储并将它们提供给组件。
const webSocketService = new WebSocketService();
const userstore = new UserStore(websocketService);
const trendStore = new TrendStore(websocketservice);
const stores = { userStore, trendStore };
...
<Provider {...stores} >
...
</Provider>
WebSocketService 可以有像
这样的方法发送(消息)
registerEventListener(事件,侦听器)
因此,您为每个商店提供了相同的 websocketService 实例。
提示:不要在组件中编写您的发送逻辑或任何其他业务登录。向特定商店添加一个方法,例如 sendMessage(message) 并从您的组件调用此方法。
希望这能回答您的问题。