Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React native 在React Native中获取重复的Websocket事件_React Native_Sockets_Websocket - Fatal编程技术网

React native 在React Native中获取重复的Websocket事件

React native 在React Native中获取重复的Websocket事件,react-native,sockets,websocket,React Native,Sockets,Websocket,我已经用Websocket实现了react native来接收事件。有时我会因为一个独特的事件而收到两个事件。我怎么知道原因呢 useEffect(() => { console.log('==========socket useEffect called========='); getNewState(); }, []); const getNewState = () => { const socket = new WebSocket('wss://socket.xxx.y

我已经用Websocket实现了react native来接收事件。有时我会因为一个独特的事件而收到两个事件。我怎么知道原因呢

useEffect(() => {
 console.log('==========socket useEffect called=========');
getNewState();
  }, []);

const getNewState = () => {
const socket = new WebSocket('wss://socket.xxx.yyy/providers');
socket.onopen = () => {
      socket.send('ping');
      socket.send(JSON.stringify({ user_name: userName }));
    };
    socket.onmessage = (event) => {
      let eventData = event.data;
      if (eventData !== 'pong') {
        console.log(eventData);
      } else {
        console.log('pong');
    };
    socket.onerror = (e) => {
      console.log(e);
      socket.close();
    };
    socket.onclose = (er) => {
      console.log(er);
      setTimeout(() => {
        getNewState();
      }, 60000);
    };
}
我在App.js的根目录中调用此组件:

class App extends React.Component {
render() {
return (
  <Provider store={store}>
    <StatusBar key="AppStatusBar" barStyle="light-content" backgroundColor={colors.blackAlertHeader} />
    <Socket />
    <AppContainer />
  </Provider>
);
})

useEffect(() => {
AppState.addEventListener('change', () => controlSocketConnection());
return () => AppState.removeEventListener('change', () => controlSocketConnection());
  }, []);

const controlSocketConnection = async () => {
if (AppState.currentState == 'active') {
  socket = await connectToWS();
  // handle socket onopen, onmessage, ...
} else if (AppState.currentState == 'background') {
  socket.close();
}