Маршрутизатор Expo - iOS - router.navigate("/") отображает предыдущий экран, но фокусируется и монтирует правильныйIOS

Программируем под IOS
Ответить
Anonymous
 Маршрутизатор Expo - iOS - router.navigate("/") отображает предыдущий экран, но фокусируется и монтирует правильный

Сообщение Anonymous »

Я работаю с Expo 51, React Native 0.74 и expo-router ~3.5.
На Android все работает как положено.
На iOS я столкнулся с проблемой с expo-router.
Когда я использую router.navigate("/") для перехода к моему index.tsx из app/cities/[newsId].tsx, вместо этого Expo возвращает меня к предыдущему экрану — newsList.
Вот мое дерево файлов:

Код: Выделить всё

app/
├── account
│   ├── address
│   │   ├── add.tsx
│   │   ├── home.tsx
│   │   └── _layout.tsx
│   ├── home.tsx
│   ├── _layout.tsx
│   ├── password
│   │   ├── change.tsx
│   │   └── verify.tsx
│   └── userInfos.tsx
├── cities
│   ├── activate.tsx
│   ├── highlights.tsx
│   ├── home.tsx
│   ├── _layout.tsx
│   ├── [newsId].tsx
│   ├── newsList.tsx
│   ├── notify.tsx
│   ├── search.tsx
│   └── settings.tsx
├── help
│   ├── home.tsx
│   └── _layout.tsx
├── index.tsx
├── _layout.tsx
├── lists
│   ├── add.tsx
│   ├── deleteList.tsx
│   ├── home.tsx
│   ├── _layout.tsx
│   ├── listMap.tsx
│   ├── listPageMenu.tsx
│   ├── listPagePreview.tsx
│   └── manage.tsx
├── login.tsx
├── +not-found.tsx
├── onboarding
│   ├── _layout.tsx
│   ├── localization.tsx
│   └── welcome.tsx
├── pages
│   ├── _layout.tsx
│   ├── onLongPressOverlay.tsx
│   ├── pageMenu.tsx
│   ├── pagePreview.tsx
│   ├── pageSheet.tsx
│   └── sharedPageSheet
│       └── [id].tsx
├── search
│   ├── home.tsx
│   ├── _layout.tsx
│   └── tagForm.tsx
└── supportUs
├── home.tsx
└── _layout.tsx
На экране newsList я не могу взаимодействовать ни с какими элементами на нем, и мне приходится перезагрузить приложение, чтобы иметь возможность снова взаимодействовать с ним.
Я добавил useFocusEffect в свой index.tsx с помощью console.debug, чтобы проверить, действительно ли система, несмотря на отображение неправильного экрана, перешла к ("/"). Сюрприз: журнал срабатывает.
Итак, правильный экран монтируется, но приложение отображает неправильный. Очень странно.
Вот мои города/[newsId].tsx:

Код: Выделить всё

import { useLocalSearchParams, useRouter } from "expo-router";
(...)
export default function NewsContentPage() {
(...)
const router = useRouter();

return (


 router.back()}
onPressClose={() => router.navigate("/")}
>
{t("Article")}


(...)

);
}

const styles = StyleSheet.create({
(...)
});
Вот мой корневой стек из /_layout.tsx: Примечание: у меня нет такой же проблемы с другими экранами.
Буду признателен за любую помощь!
Изменить: я попробовал следующее:

Код: Выделить всё

expo.replace("/")
-> то же поведение, что и при навигации.

Код: Выделить всё

expo.dismissAll()
-> приводит меня в /cities/home.
Редактирование 2: я определил основную причину проблемы. Он берет свое начало из свойств презентации в файлах _layout. Любой экран, открытый как модальное, например:presentation: "fullScreenModal", вызывает такое поведение, поэтому я решил отключить анимацию.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ut-focus-a
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»