mirror of
https://github.com/zebrajr/react.git
synced 2025-12-07 12:20:38 +01:00
* pure A higher-order component version of the `React.PureComponent` class. During an update, the previous props are compared to the new props. If they are the same, React will skip rendering the component and its children. Unlike userspace implementations, `pure` will not add an additional fiber to the tree. The first argument must be a functional component; it does not work with classes. `pure` uses shallow comparison by default, like `React.PureComponent`. A custom comparison can be passed as the second argument. Co-authored-by: Andrew Clark <acdlite@fb.com> Co-authored-by: Sophie Alpert <sophiebits@fb.com> * Warn if first argument is not a functional component
61 lines
1.9 KiB
JavaScript
61 lines
1.9 KiB
JavaScript
/**
|
|
* 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.
|
|
*
|
|
* @flow
|
|
*/
|
|
|
|
// The Symbol used to tag the ReactElement-like types. If there is no native Symbol
|
|
// nor polyfill, then a plain number is used for performance.
|
|
const hasSymbol = typeof Symbol === 'function' && Symbol.for;
|
|
|
|
export const REACT_ELEMENT_TYPE = hasSymbol
|
|
? Symbol.for('react.element')
|
|
: 0xeac7;
|
|
export const REACT_PORTAL_TYPE = hasSymbol
|
|
? Symbol.for('react.portal')
|
|
: 0xeaca;
|
|
export const REACT_FRAGMENT_TYPE = hasSymbol
|
|
? Symbol.for('react.fragment')
|
|
: 0xeacb;
|
|
export const REACT_STRICT_MODE_TYPE = hasSymbol
|
|
? Symbol.for('react.strict_mode')
|
|
: 0xeacc;
|
|
export const REACT_PROFILER_TYPE = hasSymbol
|
|
? Symbol.for('react.profiler')
|
|
: 0xead2;
|
|
export const REACT_PROVIDER_TYPE = hasSymbol
|
|
? Symbol.for('react.provider')
|
|
: 0xeacd;
|
|
export const REACT_CONTEXT_TYPE = hasSymbol
|
|
? Symbol.for('react.context')
|
|
: 0xeace;
|
|
export const REACT_CONCURRENT_MODE_TYPE = hasSymbol
|
|
? Symbol.for('react.concurrent_mode')
|
|
: 0xeacf;
|
|
export const REACT_FORWARD_REF_TYPE = hasSymbol
|
|
? Symbol.for('react.forward_ref')
|
|
: 0xead0;
|
|
export const REACT_PLACEHOLDER_TYPE = hasSymbol
|
|
? Symbol.for('react.placeholder')
|
|
: 0xead1;
|
|
export const REACT_PURE_TYPE = hasSymbol ? Symbol.for('react.pure') : 0xead3;
|
|
|
|
const MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
|
|
const FAUX_ITERATOR_SYMBOL = '@@iterator';
|
|
|
|
export function getIteratorFn(maybeIterable: ?any): ?() => ?Iterator<*> {
|
|
if (maybeIterable === null || typeof maybeIterable !== 'object') {
|
|
return null;
|
|
}
|
|
const maybeIterator =
|
|
(MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||
|
|
maybeIterable[FAUX_ITERATOR_SYMBOL];
|
|
if (typeof maybeIterator === 'function') {
|
|
return maybeIterator;
|
|
}
|
|
return null;
|
|
}
|