renderApplication.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /**
  2. * Copyright (c) Facebook, Inc. and its affiliates.
  3. *
  4. * This source code is licensed under the MIT license found in the
  5. * LICENSE file in the root directory of this source tree.
  6. *
  7. * @format
  8. * @flow
  9. */
  10. 'use strict';
  11. const AppContainer = require('./AppContainer');
  12. import GlobalPerformanceLogger from '../Utilities/GlobalPerformanceLogger';
  13. import type {IPerformanceLogger} from '../Utilities/createPerformanceLogger';
  14. import PerformanceLoggerContext from '../Utilities/PerformanceLoggerContext';
  15. const React = require('react');
  16. const invariant = require('invariant');
  17. // require BackHandler so it sets the default handler that exits the app if no listeners respond
  18. require('../Utilities/BackHandler');
  19. function renderApplication<Props: Object>(
  20. RootComponent: React.ComponentType<Props>,
  21. initialProps: Props,
  22. rootTag: any,
  23. WrapperComponent?: ?React.ComponentType<*>,
  24. fabric?: boolean,
  25. showArchitectureIndicator?: boolean,
  26. scopedPerformanceLogger?: IPerformanceLogger,
  27. isLogBox?: boolean,
  28. ) {
  29. invariant(rootTag, 'Expect to have a valid rootTag, instead got ', rootTag);
  30. const renderable = (
  31. <PerformanceLoggerContext.Provider
  32. value={scopedPerformanceLogger ?? GlobalPerformanceLogger}>
  33. <AppContainer
  34. rootTag={rootTag}
  35. fabric={fabric}
  36. showArchitectureIndicator={showArchitectureIndicator}
  37. WrapperComponent={WrapperComponent}
  38. internal_excludeLogBox={isLogBox}>
  39. <RootComponent {...initialProps} rootTag={rootTag} />
  40. </AppContainer>
  41. </PerformanceLoggerContext.Provider>
  42. );
  43. GlobalPerformanceLogger.startTimespan('renderApplication_React_render');
  44. if (fabric) {
  45. require('../Renderer/shims/ReactFabric').render(renderable, rootTag);
  46. } else {
  47. require('../Renderer/shims/ReactNative').render(renderable, rootTag);
  48. }
  49. GlobalPerformanceLogger.stopTimespan('renderApplication_React_render');
  50. }
  51. module.exports = renderApplication;