react-native-navigation的迁移库

Navigation.js 2.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import React, { AppRegistry } from 'react-native';
  2. import platformSpecific from './platformSpecific';
  3. import Screen from './Screen';
  4. const registeredScreens = {};
  5. function registerScreen(screenID, generator) {
  6. registeredScreens[screenID] = generator;
  7. AppRegistry.registerComponent(screenID, generator);
  8. }
  9. function registerComponent(screenID, generator, store = undefined, Provider = undefined) {
  10. if (store && Provider) return _registerComponentRedux(screenID, generator, store, Provider);
  11. else return _registerComponentNoRedux(screenID, generator);
  12. }
  13. function _registerComponentNoRedux(screenID, generator) {
  14. const generatorWrapper = function() {
  15. const InternalComponent = generator();
  16. return class extends Screen {
  17. static navigatorStyle = InternalComponent.navigatorStyle || {};
  18. static navigatorButtons = InternalComponent.navigatorButtons || {};
  19. render() {
  20. return (
  21. <InternalComponent navigator={this.navigator} {...this.props} />
  22. );
  23. }
  24. };
  25. }
  26. registerScreen(screenID, generatorWrapper);
  27. return generatorWrapper;
  28. }
  29. function _registerComponentRedux(screenID, generator, store, Provider) {
  30. const generatorWrapper = function() {
  31. const InternalComponent = generator();
  32. return class extends Screen {
  33. static navigatorStyle = InternalComponent.navigatorStyle || {};
  34. static navigatorButtons = InternalComponent.navigatorButtons || {};
  35. render() {
  36. return (
  37. <Provider store={store}>
  38. <InternalComponent navigator={this.navigator} {...this.props} />
  39. </Provider>
  40. );
  41. }
  42. };
  43. }
  44. registerScreen(screenID, generatorWrapper);
  45. return generatorWrapper;
  46. }
  47. function getRegisteredScreen(screenID) {
  48. const generator = registeredScreens[screenID];
  49. if (!generator) {
  50. console.error('Navigation.getRegisteredScreen: ' + screenID + ' used but not yet registered');
  51. return;
  52. }
  53. return generator();
  54. }
  55. function showModal(params = {}) {
  56. return platformSpecific.showModal(params);
  57. }
  58. function dismissModal(params = {}) {
  59. return platformSpecific.dismissModal(params);
  60. }
  61. function showLightBox(params = {}) {
  62. return platformSpecific.showLightBox(params);
  63. }
  64. function dismissLightBox(params = {}) {
  65. return platformSpecific.dismissLightBox(params);
  66. }
  67. export default {
  68. registerScreen,
  69. getRegisteredScreen,
  70. registerComponent,
  71. showModal,
  72. dismissModal,
  73. showLightBox,
  74. dismissLightBox,
  75. startTabBasedApp: platformSpecific.startTabBasedApp,
  76. startSingleScreenApp: platformSpecific.startSingleScreenApp
  77. }