mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
188c4252a2
* Fix react-dom ReferenceError requestAnimationFrame in non-browser env (#13000) The https://github.com/facebook/react/pull/12931 ( https://github.com/facebook/react/commit/79a740c6e32ca300d4e7ff55ab06de172d4237fd ) broke the server-side rendering: in the `fixtures/ssr` the following error appeared from the server-side when `localhost:3000` is requested: ``` ReferenceError: requestAnimationFrame is not defined at /__CENSORED__/react/build/node_modules/react-dom/cjs/react-dom.development.js:5232:34 at Object.<anonymous> (/__CENSORED__/react/build/node_modules/react-dom/cjs/react-dom.development.js:17632:5) at Module._compile (module.js:624:30) at Module._extensions..js (module.js:635:10) at Object.require.extensions.(anonymous function) [as .js] (/__CENSORED__/react/fixtures/ssr/node_modules/babel-register/lib/node.js:152:7) at Module.load (module.js:545:32) at tryModuleLoad (module.js:508:12) at Function.Module._load (module.js:500:3) at Module.require (module.js:568:17) at require (internal/module.js:11:18) ``` The exception pointed to this line: ```js // We capture a local reference to any global, in case it gets polyfilled after // this module is initially evaluated. // We want to be using a consistent implementation. const localRequestAnimationFrame = requestAnimationFrame; ``` **Test plan** 1. In `react` repo root, `yarn && yarn build`. 2. In `fixtures/ssr`, `yarn && yarn start`, 3. In browser, go to `http://localhost:3000`. 4. Observe the fixture page, not the exception message. * Move the requestAnimationFrameForReact check and warning to callsites (#13000) According to the comment by @gaearon: https://github.com/facebook/react/pull/13001#issuecomment-395803076 * Use `invariant` instead of `throw new Error`, use the same message (#13000) According to the comment by @gaearon: https://github.com/facebook/react/pull/13001#discussion_r194133355
25 lines
774 B
JavaScript
25 lines
774 B
JavaScript
/**
|
|
* 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';
|
|
|
|
// We capture a local reference to any global, in case it gets polyfilled after
|
|
// this module is initially evaluated.
|
|
// We want to be using a consistent implementation.
|
|
const localRequestAnimationFrame =
|
|
typeof requestAnimationFrame === 'function'
|
|
? requestAnimationFrame
|
|
: undefined;
|
|
|
|
// The callsites should check if the requestAnimationFrame imported from this module is a function,
|
|
// fire a developer warning if it doesn't exist, and substitute it by a shim in that case
|
|
// (e.g. that throws on call).
|
|
|
|
export default localRequestAnimationFrame;
|