Reactjs 单个websocket连接,用于跨组件和存储

Reactjs 单个websocket连接,用于跨组件和存储,reactjs,react-native,websocket,mobx,Reactjs,React Native,Websocket,Mobx,我有一个mobx存储,它存储来自服务器的所有数据 //stores.js class User { @observable userInfo = null; @observable webSocketConnected = false; } class Trend { @observable latest_trends = null; } 我有一个组件可以通过WebSocket键入用户输入并将其发送到服务器 @inject('UserStore') @observer

我有一个mobx存储,它存储来自服务器的所有数据

//stores.js

class User {
    @observable userInfo = null;
    @observable webSocketConnected = false;
}

class Trend {
    @observable latest_trends = null;
}
我有一个组件可以通过WebSocket键入用户输入并将其发送到服务器

@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>
        )
    }

}
@inject('TrendStore') @observer
export default class Editor extends React.Component {
    updateComment = () => {
        // socket.send(...)
    }

    render() {
        return (
            <TouchableOpacity onPress={this.updateComment}>
                <Icon/>
            </TouchableOpacity>
        )
    }
}
@inject('UserStore')@observer
导出默认类编辑器扩展React.Component{
componentDidMount(){
套接字=新的WebSocket(newURL);
}
sendText=()=>{
//socket.send(…)并更新到存储
}
render(){
返回(
...
)
}
}
我有另一个组件可以投票给用户的评论,我想通过WebSocket更新到服务器上

@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>
        )
    }

}
@inject('TrendStore') @observer
export default class Editor extends React.Component {
    updateComment = () => {
        // socket.send(...)
    }

    render() {
        return (
            <TouchableOpacity onPress={this.updateComment}>
                <Icon/>
            </TouchableOpacity>
        )
    }
}
@inject('TrendStore')@observer
导出默认类编辑器扩展React.Component{
updateComment=()=>{
//socket.send(…)
}
render(){
返回(
)
}
}

如何创建一个WebSocket连接,以便将其用于我的所有存储和组件?

您将创建一个WebSocket服务类,该类将传递给需要访问WebSocket的每个存储的构造函数。在程序的主文件中,初始化所有存储并将它们提供给组件

const webSocketService = new WebSocketService();
const userstore = new UserStore(websocketService);
const trendStore = new TrendStore(websocketservice);
const stores = { userStore, trendStore };
...
<Provider {...stores} >
   ...
</Provider>
const webSocketService=new webSocketService();
const userstore=新的userstore(websocketService);
const trendStore=新趋势商店(websocketservice);
const stores={userStore,trendStore};
...
...
WebSocketService可以有如下方法

  • 发送(消息)

  • registerEventListener(事件、侦听器)

因此,您为每个商店提供了相同的websocketService实例

提示:不要在组件中编写发送逻辑或任何其他业务登录。将方法添加到特定的存储中,如sendMessage(message),并从组件中调用此方法

const webSocketService = new WebSocketService();
const userstore = new UserStore(websocketService);
const trendStore = new TrendStore(websocketservice);
const stores = { userStore, trendStore };
...
<Provider {...stores} >
   ...
</Provider>

希望这能回答您的问题。

您将创建一个websocket服务类,传递给每个需要访问websocket的商店的构造函数。在程序的主文件中,初始化所有存储并将它们提供给组件

const webSocketService = new WebSocketService();
const userstore = new UserStore(websocketService);
const trendStore = new TrendStore(websocketservice);
const stores = { userStore, trendStore };
...
<Provider {...stores} >
   ...
</Provider>
const webSocketService=new webSocketService();
const userstore=新的userstore(websocketService);
const trendStore=新趋势商店(websocketservice);
const stores={userStore,trendStore};
...
...
WebSocketService可以有如下方法

  • 发送(消息)

  • registerEventListener(事件、侦听器)

因此,您为每个商店提供了相同的websocketService实例

提示:不要在组件中编写发送逻辑或任何其他业务登录。将方法添加到特定的存储中,如sendMessage(message),并从组件中调用此方法

const webSocketService = new WebSocketService();
const userstore = new UserStore(websocketService);
const trendStore = new TrendStore(websocketservice);
const stores = { userStore, trendStore };
...
<Provider {...stores} >
   ...
</Provider>
希望这能回答你的问题