From b56a737d62375178e7b237069dec17ce43e8a5b4 Mon Sep 17 00:00:00 2001 From: Nicolas Gallagher Date: Sun, 9 Sep 2018 11:11:18 -0700 Subject: [PATCH] [fix] prevent findNodeHandle throwing on unmounted components Fix #1097 --- .../src/exports/findNodeHandle/index.js | 13 ++++++++++++- .../src/modules/NativeMethodsMixin/index.js | 14 ++++++++------ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/packages/react-native-web/src/exports/findNodeHandle/index.js b/packages/react-native-web/src/exports/findNodeHandle/index.js index b5699583..0cf1cecf 100644 --- a/packages/react-native-web/src/exports/findNodeHandle/index.js +++ b/packages/react-native-web/src/exports/findNodeHandle/index.js @@ -8,4 +8,15 @@ */ import { findDOMNode } from 'react-dom'; -export default findDOMNode; + +const findNodeHandle = component => { + let node; + + try { + node = findDOMNode(component); + } catch (e) {} + + return node; +}; + +export default findNodeHandle; diff --git a/packages/react-native-web/src/modules/NativeMethodsMixin/index.js b/packages/react-native-web/src/modules/NativeMethodsMixin/index.js index d88c1555..7c985ac8 100644 --- a/packages/react-native-web/src/modules/NativeMethodsMixin/index.js +++ b/packages/react-native-web/src/modules/NativeMethodsMixin/index.js @@ -100,12 +100,14 @@ const NativeMethodsMixin = { return; } const node = findNodeHandle(this); - // Next state is determined by comparison to existing state (in the DOM). - // Existing state has already gone through i18n transform - const domProps = createDOMProps(null, nativeProps, style => - styleResolver.resolveWithNode(style, node) - ); - UIManager.updateView(node, domProps, this); + if (node) { + // Next state is determined by comparison to existing state (in the DOM). + // Existing state has already gone through i18n transform + const domProps = createDOMProps(null, nativeProps, style => + styleResolver.resolveWithNode(style, node) + ); + UIManager.updateView(node, domProps, this); + } } };