Реактивная навигация стека навигатора не работает

Я использовал stackNavigator 2 в одном из моих проектов следующим образом. импорт { StackNavigator } из "реагировать-навигации";

import {
   LoginScreen,
   TechStackScreen
} from '../screens';

// Public routes
export const PublicRoutes = StackNavigator({
   login: { screen: LoginScreen}
});

// Secured routes
export const SecuredRoutes = StackNavigator({
   techStack: { screen: TechStackScreen}
});

Но когда я попытался использовать его с версией 3+, это не сработало. Может кто-нибудь дать мне пример кода, как использовать stacknavigation 3+, как это?

2 ответа

Решение

Вам нужно использовать createAppContainer на вашем корневом навигаторе. Это было серьезное изменение, введенное в v3

Также StackNavigator был заменен createStackNavigator

Вот простой пример использования.

App.js

import React, {Component} from 'react';
import AppContainer from './MainNavigation';
export default class App extends React.Component {
  render() {
    return (
      <AppContainer />
    )
  }
}

MainNavigation.js

import Screen1 from './Screen1';
import Screen2 from './Screen2';
import { createStackNavigator, createAppContainer } from 'react-navigation';

const screens = {
  Screen1: {
    screen: Screen1
  },
  Screen2: {
    screen: Screen2
  }
}

const config = {
  headerMode: 'none',
  initialRouteName: 'Screen1'
}

const MainNavigator = createStackNavigator(screens,config);
export default createAppContainer(MainNavigator);

Вы должны импортировать и использовать createStackNavigatorвот документы https://reactnavigation.org/docs/en/stack-navigator.html

Просто нужно небольшое изменение в вашем коде

// Public routes
export const PublicRoutes = createStackNavigator({
   login: { screen: LoginScreen}
});

// Secured routes
export const SecuredRoutes = createStackNavigator({
   techStack: { screen: TechStackScreen}
});

Что ж, если вы используете StackNavigator, например:

// Inside "App.js"

render() {
    return (
      <NavigationContainer >
        <Stack.Navigator >
          <Stack.Screen name='Details'
                        component={ Details } />
        </Stack.Navigator >
      </NavigationContainer >
    )
}

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

// Inside "Details" Component

export default class Details extends React.Component {
  render() {
    const { navigate } = this.props.navigation

    return (
      <Button title='Goto Component' onPress={ () => navigate( 'SomeOtherComponent' ) }/>
    )
  }
}
Другие вопросы по тегам