Как перейти с экрана вкладок на экран стека в React Native

Я новичок в разработке мобильных приложений. Я запустил приложение с помощью команды — npx create-expo-app@latest myapp. Это создало такую ​​структуру папок:

Я думаю, что скобки в имени папки вкладок необходимы для соглашения. В основном _layout.tsx это содержимое –

<ThemeProvider value = {colorScheme === 'dark' ? DarkTheme : DefaultTheme}>
      <Stack>
        <Stack.Screen name = "(tabs1)" options = {{ headerShown: false }} />
        <Stack.Screen name = "Eligibility" />
      </Stack>
    </ThemeProvider>

А во внутреннем файле _layout.tsx есть вкладки типа -

<Tabs screenOptions = {{headerShown: true}}>
        <Tabs.Screen name = "index" options = {{
          headerTitle: "MyApp",
          title: "Home",
          tabBarIcon: ({ color, focused }) => (
            <TabBarIcon name = {focused ? 'home' : 'home-outline'} color = {color} />
          ),
        }} />
      </Tabs>

КОГДА я запускаю приложение, в нижнем колонтитуле есть одна вкладка с именем «Домой» и содержимое, которое присутствует в файле index.tsx. Я хочу перейти к файлу «Право на участие», который находится за пределами папки вкладок. Я попробовал использовать этот внутренний файл index.tsx

const navigation = useNavigation();
navigation.navigate('Eligibility)

и изменил внешний _layout.tsx следующим образом:

<ThemeProvider value = {colorScheme === 'dark' ? DarkTheme : DefaultTheme}>
        <NavigationContainer>
            <Stack.Navigator>
                <Stack.Screen name = "RootLayout1" options = {{ headerShown: false }} component = {RootLayout1} />
                <Stack.Screen name = "Eligibility" component = {Eligibility} />
            </Stack.Navigator>
        </NavigationContainer>
    </ThemeProvider>

RootLayout1 — это внутренний файл _layout.tsx со следующим содержимым:

export default function RootLayout1() {
  return (
      <Tabs screenOptions = {{headerShown: true}}>
        <Tabs.Screen name = "index" options = {{
          headerTitle: "Volt",
          title: "Home",
          tabBarIcon: ({ color, focused }) => (
            <TabBarIcon name = {focused ? 'home' : 'home-outline'} color = {color} />
          ),
        }} />
      </Tabs>
  );
}

но в моем методе Navigation.navigate выдавалась ошибка -

Argument of type '[string]' is not assignable to parameter of type 'never'.
  Overload 2 of 2, '(options: never): void', gave the following error.
    Argument of type 'string' is not assignable to parameter of type 'never'.

Что я делаю не так в этом?

Я также попробовал передать {navigation} в реквизитах компонента index.tsx, а затем выполнить Navigation.navigate('Eligibility), но получил ошибку - [TypeError: невозможно прочитать свойство 'navigate' из неопределенного]

Я хочу, чтобы в моем приложении было три вкладки: «Домой», «Профиль», «Scan&Pay». И на вкладке «Главная» я хочу, чтобы основные потоки были похожи на какую-то форму, а затем в случае успеха он должен отображать компонент «Право на участие» на той же вкладке «Главная». Кроме того, когда я снова нажимаю на этот компонент «Право на участие», форма должна снова открыться только на вкладке «Главная».

Есть ли способ справиться с моим вариантом использования?

Привет @Saurav Likhar, можешь ли ты добавить исходный код RootLayout1 в эту тему?

Vu Phung 17.05.2024 05:36

@VuPhung Обновил сообщение выше.

Saurav Likhar 17.05.2024 13:56
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Извините, но я не вижу, где находится ваш HomeScreen, и обнаружил в вашем коде некоторую ошибку соглашения. Если я ошибаюсь, пожалуйста, измените меня:

  • <Stack>, <Tabs>: что это? Вы имеете в виду это из const Stack = createStackNavigator(); и const Tab = createBottomTabNavigator();. если это правда, это синтаксическая ошибка.
  • name = "(tabs1)", name = "index": Пожалуйста, не указывайте имя экрана/стека/... вот так. Вам нужно это имя для действия navigate.

У меня в закуске есть небольшая демо-версия для вашего случая.

Ссылка на Закуску: https://snack.expo.dev/@pqv2210/q-78491927.

Пожалуйста, проверь это.

И если у вас есть какие-либо вопросы, оставьте комментарий к этому ответу.

Добро пожаловать в React Native и счастливое программирование!

Отлично, все выглядит нормально и соответствует моим потребностям. Просто небольшое изменение. Может ли экран «Право на участие» находиться только на вкладке «Главная»? Я имею в виду, что когда я нажимаю кнопку на главном экране, чтобы перейти к экрану соответствия критериям, нижние вкладки все равно должны отображаться. И когда я нажимаю кнопку «Назад» на экране соответствия требованиям, он должен перейти на предыдущую страницу вкладки «Главная». @VuPhung

Saurav Likhar 17.05.2024 19:00

@SauravLikhar да, это возможно, вам нужно определить право на участие в HomeStack и удалить определенное право на право в RootNavigation.

Vu Phung 18.05.2024 10:14

Другие вопросы по теме