From b305c4e034bbb3b13df2028c0503a84f91e57455 Mon Sep 17 00:00:00 2001 From: Tiago Nunes Date: Mon, 5 Nov 2018 17:08:07 +0000 Subject: [PATCH] fix(react-dom): Fix crash during server render (#14103) Check for existence of `setTimeout` and `clearTimeout` in the runtime before using them, to ensure runtimes without them (like .NET ClearScript) do not crash just by importing `react-dom`. --- packages/react-dom/src/client/ReactDOMHostConfig.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/react-dom/src/client/ReactDOMHostConfig.js b/packages/react-dom/src/client/ReactDOMHostConfig.js index f7edf1abb5..56719d96bb 100644 --- a/packages/react-dom/src/client/ReactDOMHostConfig.js +++ b/packages/react-dom/src/client/ReactDOMHostConfig.js @@ -284,8 +284,13 @@ export function createTextInstance( } export const isPrimaryRenderer = true; -export const scheduleTimeout = setTimeout; -export const cancelTimeout = clearTimeout; +// This initialization code may run even on server environments +// if a component just imports ReactDOM (e.g. for findDOMNode). +// Some environments might not have setTimeout or clearTimeout. +export const scheduleTimeout = + typeof setTimeout === 'function' ? setTimeout : (undefined: any); +export const cancelTimeout = + typeof clearTimeout === 'function' ? clearTimeout : (undefined: any); export const noTimeout = -1; // -------------------