Я работаю с ограничением, где у меня есть категории, и у каждого Category
может быть список продуктов или список подкатегорий. (Подкатегория является дочерней только одной родительской категории.)
interface Category {
objectID: string;
name: string;
subCategories: Category[];
}
У меня есть следующие настройки для отображения экранов:
StackNavigation
- RootCategoriesScreen (has custom header, no back button)
- SubCategoriesScreen (has headers and back button)
Когда кнопка «Назад» нажимается с SubCategoriesScreen
, я хочу вернуться к родителю SubCategoriesScreen
, если эта подкатегория не является дочерней по отношению к корневой категории, в противном случае вернитесь к RootCategoriesScreen
.
В моей текущей настройке любой SubCategoriesScreen
всегда возвращается только к RootCategoriesScreen
. Я пробовал много комбинаций чтения из GitHub Issue , ТАК сообщение , другой.
Это код, который у меня есть, и он не работает:
/**
* For recursive SubCategoryScreens, screen ID is the same,
* so react-navigation takes to CategoriesRootScreen from any nested sub-category screen
*/
_goBack = navigation => {
console.log(`Back button pressed from a subCategory screen`);
//navigation.goBack(null);
navigation.dispatch(
NavigationActions.back({
key: null
})
);
};
SubCategoryScreen.navigationOptions = ({ navigation }) => ({
title: navigation.getParam("category").name,
headerLeft: <HeaderBackButton onPress={() => _goBack(navigation)} />
});
Я понял, что проблема заключается в том, как реагирующая навигация определяет идентичность экрана, то есть для рекурсивных экранов подкатегории идентификатор экрана (navigation.state.key
) одинаков, поэтому реагирующая навигация переходит к CategoriesRootScreen с любого вложенного экрана подкатегории.
Что я не получаю? Как это исправить?