Как определить начальное имя маршрута дочернего навигатора из родительского навигатора? - PullRequest
0 голосов
/ 01 января 2019

Мне удалось передать исходное имя маршрута от родительского навигатора к дочернему навигатору, но кнопка «Выход из системы» в «Ящике» не работает (ничего не происходит, ошибок нет).Это потому, что я создал несколько AppContainers?

NavApp.js

const routeConfigs = {
    NavGuest: { screen: NavGuest },
    NavDrawer: { screen: NavDrawer }
}
const AppContainerIn = (props) => {
    navConfigs.initialRouteName = props.initialRouteName;

    let switchNav = createSwitchNavigator(routeConfigs, navConfigs);
    let AppContainerOut = createAppContainer(switchNav);

    return <AppContainerOut />
}
export default class NavApp extends Component {
    render() {
        return (
            <AppContainerIn initialRouteName={this.props.initialRouteName}  />
        )
    }
}

NavDrawer.js

const routeConfigs = {
    Wizard: { screen: Wizard },
    NavHomeSearch: { screen: NavHomeSearch },
}
const navConfigs = {
    contentComponent: SideMenu,
    drawerWidth: Dimensions.get('window').width - 120,
}
const ContainerDrawerIn = (props) => {
    navConfigs.initialRouteName = props.initialRouteName;

    let NavDrawer = createDrawerNavigator(routeConfigs, navConfigs);
    let ContainerDrawerOut = createAppContainer(NavDrawer);

    return <ContainerDrawerOut />
}

export default class ContainerDrawer extends Component {
    render() {
        return (
            <ContainerDrawerIn initialRouteName={this.initialRouteName}  />
        )
    }
}

SideMenu.js

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

        this.navigation = props.navigation;
    }

    logout = () => {
        AsyncStorage.removeItem('isLoggedin');

        // Help, not going anywhere. Btw, isLoggedin is successfully removed.
        this.props.navigation.navigate('NavGuest');
    }

    render() {
        return (
            <View>
                <Button title='Log Out' onPress={() => this.logout()} />
            </View>
        )
    }
}

1 Ответ

0 голосов
/ 02 января 2019

Распространенная ошибка: Явное отображение нескольких навигаторов.

https://reactnavigation.org/docs/en/common-mistakes.html

export default class App extends React.Component {
  render() {
    /* In the root component we are rendering the app navigator */
    return <AppContainer />;
  }
}

const AuthenticationNavigator = createStackNavigator({
  SignIn: SignInScreen,
  ForgotPassword: ForgotPasswordScreen,
});

class AuthenticationScreen extends React.Component {
  static router = AuthenticationNavigator.router;

  render() {
    return (
      <AuthenticationNavigator navigation={this.props.navigation} />
    );
  }
}

const AppNavigator = createSwitchNavigator({
  Auth: AuthenticationScreen, // This screen renders a navigator!
  Home: HomeScreen,
});

const AppContainer = createAppContainer(AppNavigator);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...