UNPKG

react-esm

Version:

React is a JavaScript library for building user interfaces.

61 lines (51 loc) 1.79 kB
/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import { REACT_LAZY_TYPE } from 'shared/ReactSymbols'; import warning from 'shared/warning'; export function lazy(ctor) { let lazyType = { $$typeof: REACT_LAZY_TYPE, _ctor: ctor, // React uses these fields to store the result. _status: -1, _result: null }; if (__DEV__) { // In production, this would just set it on the object. let defaultProps; let propTypes; Object.defineProperties(lazyType, { defaultProps: { configurable: true, get() { return defaultProps; }, set(newDefaultProps) { warning(false, 'React.lazy(...): It is not supported to assign `defaultProps` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.'); defaultProps = newDefaultProps; // Match production behavior more closely: Object.defineProperty(lazyType, 'defaultProps', { enumerable: true }); } }, propTypes: { configurable: true, get() { return propTypes; }, set(newPropTypes) { warning(false, 'React.lazy(...): It is not supported to assign `propTypes` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.'); propTypes = newPropTypes; // Match production behavior more closely: Object.defineProperty(lazyType, 'propTypes', { enumerable: true }); } } }); } return lazyType; }