Откройте новый экран с помощью экрана вкладок

#react-native

#react-native

Вопрос:

Я пытаюсь показать один экран, когда кто-то нажимает на текст.

Я создал экран входа в систему, один экран под названием Test и главный экран с навигационным контейнером, который содержит два экрана внутри. И я хотел бы поместить внутри одного из экранов интерактивный текст, который открывает новый экран при нажатии.

Я тоже передаю навигатор в качестве параметра, но когда я пытаюсь запустить свое приложение и нажимаю на текст с возможностью кликабельности, я получаю это сообщение:

Действие ‘NAVIGATE’ с полезной нагрузкой {«name»:»Test»} не обрабатывалось ни одним навигатором.

У вас есть экран с именем «Тест»?

Если вы пытаетесь перейти к экрану во вложенном навигаторе, см. https://reactnavigation.org/docs/nesting-navigators#navigating-to-a-screen-in-a-nested-navigator .

Это предупреждение предназначено только для разработки и не будет отображаться в рабочей среде.

Мой файл маршрутов:

 export default class App extends React.Component {

 render() {
    return (
      <NavigationContainer>
        <Stack.Navigator initialRouteName='Login' screenOptions={{headerShown: false}}>
           <Stack.Screen name='Main' component={Main} />
           <Stack.Screen name='Login' component={Login} />
           <Stack.Screen name='Test' component={Test} />
        </Stack.Navigator>
      </NavigationContainer> 
    );
  }
}
 

Файл навигатора вкладок

 const Tab = createBottomTabNavigator();

export default function App ({navigation}){
  return (
    <NavigationContainer independent={true} >
      <Tab.Navigator>

      <Tab.Screen
          name="Profile"
          component={ProfileScreen}
          options={{
            tabBarLabel: 'Perfil',
            tabBarIcon: ({ color, size }) => (
              <MaterialCommunityIcons name="home-outline" color={color} size={size} />
            ),
          }}
        />

        <Tab.Screen
          name="List"
          component={ListScreen}
          initialParams={{ navigation: navigation }} 
          options={{
            tabBarLabel: 'List'
          }}
        />

      </Tab.Navigator>
    </NavigationContainer>
  );
}
 

Функция ListScreen (содержит экран, на котором отображается текст с возможностью кликабельности)

 function ListScreen(param) {
  return (
    <SafeAreaView style={{ flex: 1, backgroundColor: "#fff" }}>
      <LinearGradient
      colors={['#000f17', '#0c3552']}
      style={styles.main_container}>
        <SafeAreaView style={styles.main_subcontainer}>
          <List navigate={param}/>
        </SafeAreaView>
      </LinearGradient>
    </SafeAreaView>
  );
}
 

Компонент списка

 export class List extends Component {
  constructor(props) {
    super(props);
    console.log(this.props.navigate.navigation.navigate);
  }
  render() {
    return (
      <View>
        <ScrollView>
        <TouchableOpacity onPress={() => {
         this.props.navigate.navigation.navigate('Test')
        }}>
        <Text>Click Here</Text>
        </TouchableOpacity>
        </ScrollView>
      </View>
    );
  }
}