React Symbols
一、作用
二、导出的常量
1. 旧版 React 元素类型
// ATTENTION
// When adding new symbols to this file,
// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'
//
// 注意
// 在向此文件添加新符号时,
// 请同时考虑将其添加到 'react-devtools-shared/src/backend/ReactSymbols'
// The Symbol used to tag the ReactElement-like types.
// 用于标记类似 ReactElement 类型的符号。
export const REACT_LEGACY_ELEMENT_TYPE: symbol = Symbol.for('react.element');
2. React 元素类型
export const REACT_ELEMENT_TYPE: symbol = renameElementSymbol
? Symbol.for('react.transitional.element')
: REACT_LEGACY_ELEMENT_TYPE;
3. React 门户类型
export const REACT_PORTAL_TYPE: symbol = Symbol.for('react.portal');
4. React 片段类型
export const REACT_FRAGMENT_TYPE: symbol = Symbol.for('react.fragment');
5. React 严格模式类型
export const REACT_STRICT_MODE_TYPE: symbol = Symbol.for('react.strict_mode');
6. React 分析器类型
export const REACT_PROFILER_TYPE: symbol = Symbol.for('react.profiler');
7. React 消费者类型
export const REACT_CONSUMER_TYPE: symbol = Symbol.for('react.consumer');
8. React 上下文类型
export const REACT_CONTEXT_TYPE: symbol = Symbol.for('react.context');
9. React 前置 ref 类型
export const REACT_FORWARD_REF_TYPE: symbol = Symbol.for('react.forward_ref');
10. React 挂起类型
export const REACT_SUSPENSE_TYPE: symbol = Symbol.for('react.suspense');
10. React 挂起列表类型
export const REACT_SUSPENSE_LIST_TYPE: symbol = Symbol.for(
'react.suspense_list',
);
11. React memo 类型
export const REACT_MEMO_TYPE: symbol = Symbol.for('react.memo');
12. React 懒惰类型
export const REACT_LAZY_TYPE: symbol = Symbol.for('react.lazy');
13. React 范围类型
export const REACT_SCOPE_TYPE: symbol = Symbol.for('react.scope');
14. React 活动类型
export const REACT_ACTIVITY_TYPE: symbol = Symbol.for('react.activity');
15. React 旧隐藏类型
export const REACT_LEGACY_HIDDEN_TYPE: symbol = Symbol.for(
'react.legacy_hidden',
);
16. React 追踪标记类型
export const REACT_TRACING_MARKER_TYPE: symbol = Symbol.for(
'react.tracing_marker',
);
17. React 备忘缓存哨兵类型
export const REACT_MEMO_CACHE_SENTINEL: symbol = Symbol.for(
'react.memo_cache_sentinel',
);
18. React 视图切换类型
export const REACT_VIEW_TRANSITION_TYPE: symbol = Symbol.for(
'react.view_transition',
);
19. 异步迭代器
export const ASYNC_ITERATOR = Symbol.asyncIterator;
20. REACT 乐观键(Symbol)
export const REACT_OPTIMISTIC_KEY: ReactOptimisticKey = (Symbol.for(
'react.optimistic_key',
): any);
21. React 乐观键
// This is actually a symbol but Flow doesn't support comparison of symbols to refine.
// We use a boolean since in our code we often expect string (key) or number (index),
// so by pretending to be a boolean we cover a lot of cases that don't consider this case.
//
// 这实际上是一个符号,但 Flow 不支持通过符号进行比较来进行类型精炼。我们使用布尔值,因为在我们的代码中我们
// 通常期望是字符串(键)或数字(索引),所以通过假装它是布尔值,我们可以涵盖许多未考虑这种情况的情况。
export type ReactOptimisticKey = true;
三、获取迭代器函数
export function getIteratorFn(maybeIterable: ?any): ?(() => ?Iterator<any>) {
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;
}
常量
// 可能迭代器符号
const MAYBE_ITERATOR_SYMBOL = Symbol.iterator;
// 伪迭代器符号
const FAUX_ITERATOR_SYMBOL = '@@iterator';