Вход / регистрация потока в качестве модального - PullRequest
0 голосов
/ 26 января 2019

Я пытаюсь использовать React Navigation для управления потоком приложения. Когда приложение открывается, оно загружает стековый навигатор, который имеет два экрана: Home (главный экран моего приложения) и Access (компонент, который является еще одним стековым навигатором, который начинается со страницы входа в систему). Это мой App.js:

import React, { Component } from 'react';
import { createStackNavigator, createAppContainer } from 'react-navigation';
import Access from './screens/access/index';
import Home from './screens/Home';

const Root = createAppContainer(createStackNavigator({
  Home: { screen: Home },
  Access: { screen: Access }
}, {
  headerMode: 'none',
  mode: 'modal'
}));

export default class App extends Component {
  render() {
    return (
      <Root />
    );
  }
}

На моем домашнем экране я проверяю, вошел ли пользователь (в конструкторе), и если нет, я хочу показать экран доступа как модальный. Очевидно, я мог вызвать this.props.navigation.navigate({ routeName: 'Access' }) из конструктора, но я хочу избежать анимации. Я думал в конструкторе ./screens/Home Я бы попробовал:

const resetAction = StackActions.reset({
  index: 1,
  actions: [
    NavigationActions.navigate({ routeName: 'Home' }),
    NavigationActions.navigate({ routeName: 'Access' }),
  ],
});
this.props.navigation.dispatch(resetAction);

Каким-то образом это не удается, потому что Error: There is no route defined for key Home. Must be one of: 'Login','Password','Signup'. Это, безусловно, относится к маршрутам в стековом навигаторе, определенном в ./screens/access/index:

import React, { Component } from 'react';
import { createStackNavigator, createAppContainer } from 'react-navigation';
import Login from './Login';
import Password from './Password';
import Signup from './Signup';

const Access = createStackNavigator({
  Login: { screen: Login },
  Password: { screen: Password },
  Signup: { screen: Signup }
}, {
  headerMode: 'none'
});
export default createAppContainer(Access);

Однако я не уверен, почему он считает, что это маршруты, когда я звоню this.props.navigation.dispatch в ./screens/Home.

Наконец, по отдельной проблеме, я хочу иметь возможность отклонить модал с экранов доступа. На первом экране этого стека (Вход в систему) я могу вызвать this.props.navigation.dispatch(NavigationActions.back()), чтобы закрыть модал. Тем не менее, если при входе в систему происходит принудительная регистрация, это просто возвращает к входу в систему (вместо отклонения модального режима). Как мне этого добиться?

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