/
githubmr
/
facebook-react
Обзор
Документация
Войти
/
githubmr
/
facebook-react
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
status
packages/react-reconciler/src/ReactCurrentFiber.js
107 строк
3 KB
Dan Abramov
List ignored types instead of included types in the stack (#14308)
22 ноя 2018, 18:41
Не верифицирован
22 ноя 2018, 18:41
dd8205c
Код
Авторство
О чём код?
/** * 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 */ import type {Fiber} from './ReactFiber'; import ReactSharedInternals from 'shared/ReactSharedInternals'; import { HostRoot, HostPortal, HostText, Fragment, ContextProvider, ContextConsumer, } from 'shared/ReactWorkTags'; import describeComponentFrame from 'shared/describeComponentFrame'; import getComponentName from 'shared/getComponentName'; const ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame; type LifeCyclePhase = 'render' | 'getChildContext'; function describeFiber(fiber: Fiber): string { switch (fiber.tag) { case HostRoot: case HostPortal: case HostText: case Fragment: case ContextProvider: case ContextConsumer: return ''; default: const owner = fiber._debugOwner; const source = fiber._debugSource; const name = getComponentName(fiber.type); let ownerName = null; if (owner) { ownerName = getComponentName(owner.type); } return describeComponentFrame(name, source, ownerName); } } export function getStackByFiberInDevAndProd(workInProgress: Fiber): string { let info = ''; let node = workInProgress; do { info += describeFiber(node); node = node.return; } while (node); return info; } export let current: Fiber | null = null; export let phase: LifeCyclePhase | null = null; export function getCurrentFiberOwnerNameInDevOrNull(): string | null { if (__DEV__) { if (current === null) { return null; } const owner = current._debugOwner; if (owner !== null && typeof owner !== 'undefined') { return getComponentName(owner.type); } } return null; } export function getCurrentFiberStackInDev(): string { if (__DEV__) { if (current === null) { return ''; } // Safe because if current fiber exists, we are reconciling, // and it is guaranteed to be the work-in-progress version. return getStackByFiberInDevAndProd(current); } return ''; } export function resetCurrentFiber() { if (__DEV__) { ReactDebugCurrentFrame.getCurrentStack = null; current = null; phase = null; } } export function setCurrentFiber(fiber: Fiber) { if (__DEV__) { ReactDebugCurrentFrame.getCurrentStack = getCurrentFiberStackInDev; current = fiber; phase = null; } } export function setCurrentPhase(lifeCyclePhase: LifeCyclePhase | null) { if (__DEV__) { phase = lifeCyclePhase; } }