react-native-navigation的迁移库

ContainerRegistry.js 1.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import React, {Component} from 'react';
  2. import {AppRegistry} from 'react-native';
  3. import * as PropsStore from './PropsStore';
  4. import * as ContainerStore from './ContainerStore';
  5. export function registerContainer(containerKey, getContainerFunc) {
  6. const OriginalContainer = getContainerFunc();
  7. const NavigationContainer = wrapContainer(containerKey, OriginalContainer);
  8. ContainerStore.saveContainerClass(containerKey, NavigationContainer);
  9. AppRegistry.registerComponent(containerKey, () => NavigationContainer);
  10. }
  11. export function getRegisteredContainer(containerKey) {
  12. return ContainerStore.getContainerClass(containerKey);
  13. }
  14. function wrapContainer(containerKey, OriginalContainer) {
  15. return class extends Component {
  16. constructor(props) {
  17. super(props);
  18. if (!props.screenId) {
  19. throw new Error(`Screen ${containerKey} does not have a screenId!`);
  20. }
  21. this.state = {
  22. screenId: props.screenId,
  23. allProps: {...props, ...PropsStore.getPropsForScreenId(props.screenId)}
  24. };
  25. }
  26. componentWillReceiveProps(nextProps) {
  27. this.setState({
  28. allProps: {...nextProps, ...PropsStore.getPropsForScreenId(this.state.screenId)}
  29. });
  30. }
  31. render() {
  32. return (
  33. <OriginalContainer {...this.state.allProps} screenId={this.state.screenId}/>
  34. );
  35. }
  36. };
  37. }