NavigationService замедляет реагирование собственного производства - PullRequest
0 голосов
/ 16 мая 2019

Я реализовал NavigationService, который предоставляет реагирующая навигация, и это заставляет производственное приложение загружаться в 10 раз медленнее.

Я сделал apk с ним и без него.

Тот, которыйзапускается ли он через 15+ секунд, а другой - через 1-2 секунды.

Кто-нибудь еще сталкивался с такой проблемой?

Вот код, который я использую в навигаторе инавигационный сервис:

RootNavigator.js:

import React, { Component } from "react";
import {
  createStackNavigator,
  HeaderBackButton,
  createAppContainer
} from "react-navigation";

import { colors } from "assets/styles/colors";

import RegistrationInputScreen from "components/Registration/Input";
import RegistrationVerificationScreen from "components/Registration/Verification";
import MainScreen from "screens/MainScreen";
import Conversation from "components/Messages/Conversation";
import Private from "components/FirstTime/Private";
import Description from "components/FirstTime/Description";
import CategoriesScreen from "components/FirstTime/CategoriesScreen";
import Professional from "components/FirstTime/Professional";
import Home from "components/Home";
import SecretScreen from "screens/SecretScreen";
import Map from "components/Map/Map";
import ProfileScreen from "components/Profile/Profile";
import EditProfile from "components/Profile/EditProfile";
import PublicProfile from "components/Profile/PublicProfile";
import Settings from "components/Profile/Settings";
import RegisteredScreen from "components/Partials/Registered";
import NavigationService from "navigation/NavigationService";

export default class RootNavigator extends Component {
  constructor(props) {
    super(props);
  }

  componentWillMount() {
    console.log("PROPS", this.props);
  }

  render() {
    let sp = this.props.screenProps;
    return (
      <Navigator
        // ref={navigatorRef => {
        //   NavigationService.setTopLevelNavigator(navigatorRef);
        // }}
        screenProps={{
          getDeviceToken: sp.getDeviceToken
        }}
      />
    );
  }
}

export const RootNav = createStackNavigator({
  RegistrationOptions: {
    screen: Home,
    navigationOptions: {
      header: null
    }
  },
  RegistrationInput: {
    screen: RegistrationInputScreen,
    navigationOptions: config => setHeader(null, config)
  },
  RegistrationVerification: {
    screen: RegistrationVerificationScreen,
    navigationOptions: config => setHeader("Registration Verification", config)
  },
  Map: {
    screen: Map,
    navigationOptions: {
      header: null
    }
  },
  MainScreen: MainScreen,
  Registered: {
    screen: RegisteredScreen,
    navigationOptions: {
      header: null
    }
  },
  Private: {
    screen: Private,
    navigationOptions: config => setHeader("Introduce yourself", config)
  },
  Interests: {
    screen: CategoriesScreen,
    navigationOptions: config => setHeader("Back", config)
  },
  Description: {
    screen: Description,
    navigationOptions: config => setHeader("Describe yourself", config)
  },
  Professional: {
    screen: Professional,
    navigationOptions: config => setHeader("Professional", config)
  },
  Conversation: {
    screen: Conversation,
    navigationOptions: config => setHeader(null, config)
  },
  Secret: {
    screen: SecretScreen,
    navigationOptions: config => setHeader("Configure app", config)
  },
  Profile: {
    screen: ProfileScreen,
    navigationOptions: config => setHeader("Profile", config)
  },
  Public: {
    screen: PublicProfile,
    navigationOptions: config => setHeader("Profile", config)
  },
  EditProfile: {
    screen: EditProfile,
    navigationOptions: config => setHeader("Edit profile", config)
  },
  Settings: {
    screen: Settings,
    navigationOptions: config => setHeader("Settings", config)
  }
});

export const Navigator = createAppContainer(RootNav);

const setHeader = (title = null, config) => {
  let options = {
    title: title,
    headerStyle: {
      backgroundColor: colors.bgRed,
      shadowOpacity: 0,
      shadowOffset: {
        height: 0
      },
      shadowRadius: 0,
      elevation: 0
    },
    headerTitleStyle: { color: colors.white },
    headerTransitionPreset: { headerMode: "screen" },
    cardShadowEnabled: false,
    headerLeft: (
      <HeaderBackButton
        tintColor={colors.white}
        onPress={() => config.navigation.dispatch({ type: "Navigation/BACK" })}
      />
    ),
    ...config.navigationOptions
  };

  if (title === null) delete options.title;

  return options;
};

NavigationService.js:

import { NavigationActions } from 'react-navigation';

let _navigator;

const setTopLevelNavigator = (navigatorRef) => {
    console.log("WILL SET TOP LEVEL NAVIGATOR WITH", navigatorRef);
    _navigator = navigatorRef;
}

const navigate = (routeName, params) => {
    _navigator.dispatch(
        NavigationActions.navigate({
            routeName,
            params
        })
    )
}

export default{
    navigate,
    setTopLevelNavigator
}

1 Ответ

0 голосов
/ 16 мая 2019

В случае, если кто-то еще борется с этим, я решил проблему, удалив console.log внутри setTopLevelNavigator.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...