• name: getIteratorFn
  • type: function
  • 适用性: 内部
  • path: shared/ReactSymbols.js

判断传入的参数是否是可遍历的,若是,则返回该对象的遍历器函数,否则返回null

使用示例:

import { getIteratorFn } from 'shared/getIteratorFn';

var arrIte = getIteratorFn([1,2,3]); // ƒ values() { [native code] }
var other = getIteratorFn({}); // null
for (var m of arrIte()) {
  console.log(m); // 1,2,3
}

源代码:

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;
}

该文件还导出一系列以 REACT_ 开头的全大写的常量,我们只需要知道,这些常量的值都是唯一的,一般用于判断两个值是不是同一类型,或者某个值是否是某种类型。

这些变量,的赋值方式一样,都是先判断是否有 SymbolSymbol.for 函数,没有则用数字代替。

  • REACT_ELEMENT_TYPE
export let REACT_ELEMENT_TYPE =
  typeof Symbol === 'function' && Symbol.for
    ? Symbol.For('react.element') : 0xeac7; // 0xeac7 -> 60103