Как получить доступ к функции navigate / goBack в классе, который отображал AppContainer в ReactNative - PullRequest
0 голосов
/ 18 февраля 2020

Я создал приложение с несколькими страницами для навигации, и оно отлично работает, когда я отправляю запросы навигации с дочерних страниц (goBack или navigate ('...')). Проблема в том, что мне нужно переключать страницы из класса, который создал AppContainer. Это выглядит сложнее. Я пытался несколькими способами с ссылками, но все время функция навигации не доступна. Я хочу создать sh домашнюю страницу в функции обратного вызова BasicFooter. Я пытался использовать диспетчеризацию, но та же проблема. Я не уверен, возможно ли вообще заставить его работать по ссылке AppContainer или мне нужно построить структуру с

 <NavigationContainer>
      <Stack.Navigator>{/* ... */}</Stack.Navigator>
    </NavigationContainer>

Это мой код:

export default class App extends React.Component {

    constructor(props) {
      super(props);

      this.refNavi = React.createRef();
      this.goToMain_audio = this.goToMain_audio.bind(this);
    }


    goToMain_audio()    {
      console.log("Object ", this.refNavi.current.navigation.navigate('Home')); //<==Undefined!
    }


    render() {
      return ( <
        View style = {
          styles.container
        } >
        <AppContainer ref = {
          this.refNavi
        }
        style = {
          styles.container
        } </AppContainer>

        <View style = {
          styles.footer1
        }>
        <BasicFooter style = {
          styles.footer1
        }
        clickedAudio = {
          this.goToMain_audio
        }
        clickedMood = {
          this.refNavi.current.navigate('Home')
        } //<== Undefined!
        >
        <
        /BasicFooter> </View>
      }
    }
    const AppNavigator = createStackNavigator({

      Home: {
        screen: MainScreen,
      },
      SettingsPage: {
        screen: Settings,
      },
      SettingsMain: {
        screen: SettingsMain,
      },
      ConnectionPage: {
        screen: Connection,
      }
    }, {
      initialRouteName: "Home",
      transitionConfig,
      header: null,
      headerMode: 'none'
    });

    const AppContainer = createAppContainer(AppNavigator);
...