реакции-навигация goBack на рекурсивно идентичный экран - PullRequest
0 голосов
/ 18 января 2019

Я работаю с ограничением, где у меня есть категории, и у каждого 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 с любого вложенного экрана подкатегории.

Что я не получаю? Как это исправить?

...