diff --git a/Libraries/Core/setUpReactDevTools.js b/Libraries/Core/setUpReactDevTools.js index 2ba4c5dc6a41b0..099f12242bc56e 100644 --- a/Libraries/Core/setUpReactDevTools.js +++ b/Libraries/Core/setUpReactDevTools.js @@ -11,8 +11,19 @@ 'use strict'; if (__DEV__) { + let isWebSocketOpen = false; + let ws = null; + const reactDevTools = require('react-devtools-core'); const connectToDevTools = () => { + if (ws !== null && isWebSocketOpen) { + // If the DevTools backend is already connected, don't recreate the WebSocket. + // This would break the connection. + // If there isn't an active connection, a backend may be waiting to connect, + // in which case it's okay to make a new one. + return; + } + // not when debugging in chrome // TODO(t12832058) This check is broken if (!window.document) { @@ -39,7 +50,13 @@ if (__DEV__) { : 8097; const WebSocket = require('../WebSocket/WebSocket'); - const ws = new WebSocket('ws://' + host + ':' + port); + ws = new WebSocket('ws://' + host + ':' + port); + ws.addEventListener('close', event => { + isWebSocketOpen = false; + }); + ws.addEventListener('open', event => { + isWebSocketOpen = true; + }); const viewConfig = require('../Components/View/ReactNativeViewViewConfig'); reactDevTools.connectToDevTools({