#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. Еще раз спасибо за помощь