Как перейти к некоторому экрану из корневого компонента (используется Redux навигация) в приложении React Native - PullRequest
0 голосов
/ 16 апреля 2019

Я новичок в реакции-родной, поэтому извините, что не знаю основ.Для навигации мы используем промежуточное ПО ReduxNavigation и Thunk.Навигация работает абсолютно нормально со всех экранов.Однако теперь мне нужно зарегистрировать прослушиватель FCM для корневого компонента и перейти к определенному экрану при получении сообщения.Я сталкиваюсь с проблемами в том, как перейти от корневого компонента к компоненту экрана приложения

const middleware = createReactNavigationReduxMiddleware(
  "root",
  state => state.nav
);

const RduxifiedNavigator = reduxifyNavigator(AppNavigator, "root");

class ReduxNavigation extends Component<Props> {
  componentDidMount() {
    BackHandler.addEventListener("hardwareBackPress", this.onBackPress);

    FCM.getInitialNotification().then(notif => {
      console.log("notif: " + JSON.stringify(notif));

      // if (notif) {
      //   //setTimeout(() => {
      //   dispatch(
      //     NavigationActions.navigate({ routeName: "Notification" })
      //   );
      //   //}, 500);
      // }
    });


  }

  componentWillUnmount() {
    BackHandler.removeEventListener("hardwareBackPress", this.onBackPress);
  }

  onBackPress = () => {
    const { navigation, dispatch } = this.props;
    if (navigation.index === 0) {
      return false;
    }

    dispatch(NavigationActions.back());
    return true;
  };

  render() {
    const { navigation, dispatch } = this.props;
    return <RduxifiedNavigator state={navigation} dispatch={dispatch} />;
  }
}

const mapStateToProps = state => ({
  navigation: state.nav
});

const AppWithNavigationState = connect(mapStateToProps)(ReduxNavigation);

export const store = createStore(
  AppReducer,
  applyMiddleware(middleware, thunk)
);

export default class App extends Component<Props> {
  render() {
    return (
      // <View></View>
      <Provider store={store}>
        <AppWithNavigationState />
      </Provider>
    );
  }
}

Как мне перейти к некоторому экрану в приложении отсюда -

 FCM.getInitialNotification().then(notif => { });

Я пытался использовать это.props.navigation.navigate (), однако метод навигации не определен в объекте навигации здесь в корневом объекте

Я также попытался диспетчеризация (NavigationActions.navigate ({routeName: "ROUTE_NAME"})), здесь диспетчеризацияотображается неопределенным

...