export function createContext<T>( // 默认值 defaultValue: T, // 判断新老变化 calculateChangedBits: ?(a: T, b: T) => number,): ReactContext<T> { // calculateChangedBits 类型校验 // ... // 创建 context 实例,同时其实也是 Consumer const context: ReactContext<T> = { $$typeof: REACT_CONTEXT_TYPE, _calculateChangedBits: calculateChangedBits, // As a workaround to support multiple concurrent renderers, we categorize // some renderers as primary and others as secondary. We only expect // there to be two concurrent renderers at most: React Native (primary) and // Fabric (secondary); React DOM (primary) and React ART (secondary). // Secondary renderers store their context values on separate fields. _currentValue: defaultValue, _currentValue2: defaultValue, // These are circular Provider: (null: any), Consumer: (null: any), }; // 创建 Provide 元素 context.Provider = { $$typeof: REACT_PROVIDER_TYPE, _context: context, }; // 开发时非法使用的错误抛出 // ... // 将 Consumer 指向 context 自身 context.Consumer = context; return context;}