Возврат назад не приводит к появлению навигации в соответствии с React Navigation 5

#react-native #react-native-navigation

#react-native #react-native-navigation

Вопрос:

В настоящее время у меня есть настройка

Корневая навигация

  • Домашняя навигация? Аутентификация (в зависимости от входа в систему или нет)
  • EditProfile
  • Профиль (ProfileStack)

ProfileStack

  • Страница профиля
  • Подписчики профиля
  • ProfileFollowing
  • Настройка

Проблема, с которой я столкнулся, заключается в следующем. Когда я перехожу к LandingPage -> ProfilePage (идентификатор пользователя 4) -> Following , то нажатие navigation.goback() не вызывает проблем. Это возвращает меня на страницу пользователя. Когда я пытаюсь

LandingPage -> ProfilePage (идентификатор пользователя 4) -> Following -> ProfilePage (идентификатор пользователя 5) -> goBack() результат возвращается не на следующую страницу со списком, а обратно на LandingPage .

Я думал, что в React Navigation он следует истории, так что возврат назад приводит к удалению текущей страницы и возврату к последней, которую мы посетили. Неужели я не понимаю эту часть? Способ, которым я возвращаюсь к своей навигации, таков:

 return <ProfileStack.Navigator>
    <ProfileStack.Screen name="ProfilePage" component={Profile} options={({ route, navigation }) => {
        return {
            title: "Profile Page",
            headerLeft: () => {
                return <Ionicons onPress={() => navigation.goBack()} name="md-arrow-round-back" size={30} color="black" style={{ marginLeft: 15 }} />
            },
            headerRight: () => {
                return <Ionicons onPress={() => navigation.navigate('EditProfile')} name="ios-settings" size={30} color="black" style={{ marginRight: 15 }} />
            }
        }
    }
    } />
    <ProfileStack.Screen name="ProfileFollowers" component={ProfileFollowers} options={() => {
        return {
            title: 'Follower'
        }
    }} />
    <ProfileStack.Screen name="ProfileFollowing" component={ProfileFollowing} options={() => {
        return {
            title: 'Following'
        }
    }}/>
    <ProfileStack.Screen name="Setting" component={Settings} />
</ProfileStack.Navigator>
 

Ответ №1:

Вы все еще можете использовать следующую команду:

 navigation.navigate(Screen)
 

Навигация React такова, что она сохраняет экраны в стеке. Таким образом, вторая ячейка в вашем стеке всегда является страницей, на которую вы перешли на новую страницу. Наконец, используя ту же команду, вы получите опыт, аналогичный goBack() .
Реагирующая навигация обнаруживает, что вы возвращаетесь на предыдущую страницу. Так что проблем не будет.
Конечно, есть способы решить вашу проблему. Но на данный момент это самый быстрый способ добраться туда. И нет неправильного пути.

Комментарии:

1. Спасибо за этот ответ. Я пытался, но с этим подходом есть небольшая проблема. Давайте возьмем Instagram в качестве примера. Мы переходим с сообщения на страницу пользователя и загружаем всю его информацию, используя идентификатор пользователя, который мы отправляем в качестве параметра. Мы можем вернуться () на страницу публикации, просто щелкнув goBack() . Теперь, если бы мы вместо этого сделали Followers и перешли на другую страницу пользователя, что означает, что идентификатор пользователя отличается, в этот момент, если бы у нас была навигация (экран), когда мы вернемся, нам все равно нужно каким-то образом сохранить ссылку на идентификатор пользователя, поскольку это приведет к сбою.

2. Если мы не начнем отправлять массив идентификаторов пользователей, чтобы сохранить ссылку на тот, к которому мы продолжаем возвращаться, но это звучит как цикл с возможными ошибками. Возможно, я ошибаюсь и пытаюсь использовать этот подход для доступа к 3 страницам. Целевая страница -> Страница профиля -> Следующая -> Страница профиля -> Следующая, после чего необходимо точно вернуться ко всем из них.

3. Спасибо за этот ответ. Хотя это немного сбивает с толку, и мне нужно будет создать пользовательскую историю. Он работает правильно. Я вернусь назад и попытаюсь найти новый подход в будущем в качестве задачи todo. Еще раз спасибо за помощь