diff --git a/packages/react-scheduler/src/ReactScheduler.js b/packages/react-scheduler/src/ReactScheduler.js index 045612bceb..942d69de9c 100644 --- a/packages/react-scheduler/src/ReactScheduler.js +++ b/packages/react-scheduler/src/ReactScheduler.js @@ -39,20 +39,7 @@ type CallbackConfigType = {| |}; import ExecutionEnvironment from 'fbjs/lib/ExecutionEnvironment'; -import warning from 'fbjs/lib/warning'; - -if (__DEV__) { - if ( - ExecutionEnvironment.canUseDOM && - typeof requestAnimationFrame !== 'function' - ) { - warning( - false, - 'React depends on requestAnimationFrame. Make sure that you load a ' + - 'polyfill in older browsers. https://fb.me/react-polyfills', - ); - } -} +import requestAnimationFrameForReact from 'shared/requestAnimationFrameForReact'; const hasNativePerformanceNow = typeof performance === 'object' && typeof performance.now === 'function'; @@ -232,7 +219,7 @@ if (!ExecutionEnvironment.canUseDOM) { if (!isAnimationFrameScheduled) { // Schedule another animation callback so we retry later. isAnimationFrameScheduled = true; - requestAnimationFrame(animationTick); + requestAnimationFrameForReact(animationTick); } } }; @@ -298,7 +285,7 @@ if (!ExecutionEnvironment.canUseDOM) { // might want to still have setTimeout trigger scheduleWork as a backup to ensure // that we keep performing work. isAnimationFrameScheduled = true; - requestAnimationFrame(animationTick); + requestAnimationFrameForReact(animationTick); } return newCallbackId; }; diff --git a/packages/shared/forks/requestAnimationFrameForReact.www.js b/packages/shared/forks/requestAnimationFrameForReact.www.js new file mode 100644 index 0000000000..f082644eca --- /dev/null +++ b/packages/shared/forks/requestAnimationFrameForReact.www.js @@ -0,0 +1,10 @@ +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +'use strict'; + +export default require('requestAnimationFrameForReact'); diff --git a/packages/shared/requestAnimationFrameForReact.js b/packages/shared/requestAnimationFrameForReact.js new file mode 100644 index 0000000000..aa59610322 --- /dev/null +++ b/packages/shared/requestAnimationFrameForReact.js @@ -0,0 +1,28 @@ +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow + */ + +'use strict'; + +import ExecutionEnvironment from 'fbjs/lib/ExecutionEnvironment'; +import warning from 'fbjs/lib/warning'; + +if (__DEV__) { + if ( + ExecutionEnvironment.canUseDOM && + typeof requestAnimationFrame !== 'function' + ) { + warning( + false, + 'React depends on requestAnimationFrame. Make sure that you load a ' + + 'polyfill in older browsers. https://fb.me/react-polyfills', + ); + } +} + +export default requestAnimationFrame; diff --git a/scripts/rollup/forks.js b/scripts/rollup/forks.js index 28de8651c1..7df244733f 100644 --- a/scripts/rollup/forks.js +++ b/scripts/rollup/forks.js @@ -74,6 +74,17 @@ const forks = Object.freeze({ return null; }, + // This logic is forked on www to use the 'acrossTransitions' version. + 'shared/requestAnimationFrameForReact': (bundleType, entry) => { + switch (bundleType) { + case FB_WWW_DEV: + case FB_WWW_PROD: + return 'shared/forks/requestAnimationFrameForReact.www.js'; + default: + return null; + } + }, + // This logic is forked on www to blacklist warnings. 'shared/lowPriorityWarning': (bundleType, entry) => { switch (bundleType) {