UNPKG

react-native

Version:

A framework for building native apps using React

82 lines (72 loc) 2.65 kB
/** * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @format * @flow */ const AppContainer = require('./AppContainer'); import GlobalPerformanceLogger from '../Utilities/GlobalPerformanceLogger'; import type {IPerformanceLogger} from '../Utilities/createPerformanceLogger'; import PerformanceLoggerContext from '../Utilities/PerformanceLoggerContext'; import type {DisplayModeType} from './DisplayMode'; import getCachedComponentWithDebugName from './getCachedComponentWithDebugName'; const React = require('react'); const invariant = require('invariant'); // require BackHandler so it sets the default handler that exits the app if no listeners respond require('../Utilities/BackHandler'); function renderApplication<Props: Object>( RootComponent: React.ComponentType<Props>, initialProps: Props, rootTag: any, WrapperComponent?: ?React.ComponentType<any>, fabric?: boolean, showArchitectureIndicator?: boolean, scopedPerformanceLogger?: IPerformanceLogger, isLogBox?: boolean, debugName?: string, displayMode?: ?DisplayModeType, useConcurrentRoot?: boolean, ) { invariant(rootTag, 'Expect to have a valid rootTag, instead got ', rootTag); const performanceLogger = scopedPerformanceLogger ?? GlobalPerformanceLogger; let renderable = ( <PerformanceLoggerContext.Provider value={performanceLogger}> <AppContainer rootTag={rootTag} fabric={fabric} showArchitectureIndicator={showArchitectureIndicator} WrapperComponent={WrapperComponent} initialProps={initialProps ?? Object.freeze({})} internal_excludeLogBox={isLogBox}> <RootComponent {...initialProps} rootTag={rootTag} /> </AppContainer> </PerformanceLoggerContext.Provider> ); if (__DEV__ && debugName) { const RootComponentWithMeaningfulName = getCachedComponentWithDebugName( `${debugName}(RootComponent)`, ); renderable = ( <RootComponentWithMeaningfulName> {renderable} </RootComponentWithMeaningfulName> ); } performanceLogger.startTimespan('renderApplication_React_render'); performanceLogger.setExtra('usedReactFabric', fabric ? '1' : '0'); if (fabric) { require('../Renderer/shims/ReactFabric').render( renderable, rootTag, null, useConcurrentRoot, ); } else { require('../Renderer/shims/ReactNative').render(renderable, rootTag); } performanceLogger.stopTimespan('renderApplication_React_render'); } module.exports = renderApplication;