Возврат к домашнему стеку с помощью react-navigation / native

#react-native #react-navigation #react-navigation-v5

#react-native #реагирующая навигация #react-navigation-v5

Вопрос:

Я использую react-viro для разработки AR-приложения. В основном app.js у меня есть следующий код:

 var arScenes = {
  'Campidoglio_AR': require('./js/Campidoglio_AR/Campidoglio_AR'),
  'Piazza_Bra_AR': require('./js/Piazza_Bra_AR/Piazza_Bra_AR'),
}

function HomeScreen({ navigation }) {
  return (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Text>Questa è la schermata iniziale</Text>
      <Text>Premi il bottone sottostante per visitare Piazza Bra</Text>
      <Button
        title="Piazza Bra"
        onPress={() => navigation.navigate('Piazza Bra')}
      />
  );
}

function Piazza_Bra_AR({ navigation }) {
  return (
    <ViroARSceneNavigator
      initialScene={{
        scene: arScenes['Piazza_Bra_AR'],
      }} />
    );
}

const Stack = createStackNavigator();

function App() {
  return (
    <NavigationContainer>
      <Stack.Navigator initialRouteName="Home">
        <Stack.Screen name="Home" component={HomeScreen} />
        <Stack.Screen options={{headerShown: false}} name="Piazza Bra" component={Piazza_Bra_AR} />
      </Stack.Navigator>
    </NavigationContainer>
  );
}

export default App;
  

итак, когда я нажимаю на кнопку на главном экране, я перехожу к Piazza_Bra_AR.js это выглядит так:

 export default class Piazza_Bra_AR_Scene extends React.Component {
  constructor() {
    super();

    this.state = {
      showSceneItems : false,
    }

    this._getInfoControls = this._getInfoControls.bind(this);
    this._onBackClick = this._onBackClick.bind(this);
    this._onBackgroundPhotoLoadEnd = this._onBackgroundPhotoLoadEnd.bind(this);
  }

  render() {
    return (
      <ViroARScene style={styles.container}>
      <ViroSkyBox source={{
                 nx:require('./res/Skybox/negx.png'),
                 px:require('./res/Skybox/posx.png'),
                 ny:require('./res/Skybox/negy.png'),
                 py:require('./res/Skybox/posy.png'),
                 nz:require('./res/Skybox/negz.png'),
                 pz:require('./res/Skybox/posz.png')}}
                 onLoadEnd={this._onBackgroundPhotoLoadEnd}/>

        <LoadingSpinner visible={!this.state.showSceneItems} position={[0, 0, -5]}/>
        <ViroImage source={nastro_azzurro} onClick={() => navigation.navigate('Home')} /> //here i want to navigate 
        {this._getInfoControls()}

      </ViroARScene>
    );
 }

  _getInfoControls() {
    return (
      <ViroNode
        opacity={0}
        animation={{
          name : "fadeIn",
          run : this.state.showSceneItems,
          loop : false,
        }} >

        <InfoElement url={arena_url} tipo_struttura={monumento} content={arena} event_content={event_arena} contentCardScale={[1,1,1]} position={polarToCartesian([-5, 220, -15])}/>
        <InfoElement url={initimissimi_url} tipo_struttura={negozio} content={intimissimi} event_content={event_intimissimi} contentCardScale={[1,1,1]} position={polarToCartesian([-8, 184, -5])}/>
        <InfoElement url={lv_url} tipo_struttura={negozio} content={lv} contentCardScale={[1,1,1]} event_content={event_lv} position={polarToCartesian([-7, 170, -5])}/>
        <InfoElement url={cinema_rivoli_url} tipo_struttura={tempo_libero} content={cinema_rivoli} event_content={event_cinema_rivoli} contentCardScale={[1,1,1]} position={polarToCartesian([-6, 62, -5])}/>
        <InfoElement url={piazza_url} tipo_struttura={tempo_libero} content={piazza} contentCardScale={[1,1,1]} event_content={event_piazza} position={polarToCartesian([-6, -23, -5])}/>
        <InfoElement url={comune_url} tipo_struttura={monumento} content={comune} contentCardScale={[1.5,1.5,1.5]} event_content={event_comune} position={polarToCartesian([-7, -65, -10])}/>
      </ViroNode>
    );
  }
  _onBackgroundPhotoLoadEnd() {
    this.setState({
      showSceneItems:true
    });
  }
}

module.exports = Piazza_Bra_AR_Scene;
  

мне было интересно, как я могу вернуться на свой домашний экран, используя OnClick на вироизображении. По поводу проблемы с github (https://github.com/viromedia/viro/issues/877) говорят, что вы просто делаете, как обычно, в обычном приложении react-native, но я не могу добраться до него.
Как вы можете себе представить, по моим словам, я вообще не разработчик, просто так получилось, что мой друг, который работает над своей диссертацией (он графический), попросил меня помочь ему; это говорит о том, что любая помощь будет действительно оценена, и я предоставлю дополнительную информацию, если потребуется.

Ответ №1:

NVM это был глупый вопрос… просто отредактировал его следующим образом

 function Piazza_Bra_AR({ navigation }) {
  return (
    <ViroARSceneNavigator
      initialScene={{
        scene: arScenes['Piazza_Bra_AR'],
        passProps: { navigation },
      }} />
    );
}
  

и затем в Piazza_Bra_AR.js добавлена эта строка прямо под render(){ :

 const { navigation } = this.props;
  

называть это так:

 onClick={() => navigation.navigate('Screen_name')}