Передача состояния в React-навигации от TabsNavigation к дочернему стеку Navigation - PullRequest
0 голосов
/ 15 ноября 2018

ОБНОВЛЕНИЕ: теперь с демоверсией закуски

Я создал демо на закуску , чтобы вы могли увидеть проблему из первых рук и помочь мне продемонстрировать решение в реальном коде.

Шаги для дублирования

  1. Запустить приложение
  2. Нажмите кнопку «Перейти к событиям»
  3. Нажмите на каждую вкладку, заметив, что eventId находится в области видимости для первых трех вкладок
  4. Нажмите вкладку «Еще»
  5. Нажмите «ЧЛЕНЫ КОМАНДЫ», заметив, что идентификатор события больше не находится в области видимости. Вот в чем проблема. Как мне передать eventId?

_____________________________

Мое приложение имеет следующую иерархию навигации, где каждый экземпляр <> является просто обычным компонентом

App <StackNavigator> {
    EventList <>
    EventTabs <BottomTabNavigator> {
        Quests <>
        Leaderboard <>
        Gallery <>
        More <StackNavigator> {
            MoreList <>
            TeamMembers <>
        }

    }
}

После входа в приложение первый экран пользователя будет EventList. Они нажимают кнопку, чтобы перейти к EventTabs, поэтому я могу использовать navigation.navigate() для перехода при прохождении состояния, например ...

EventList.navigation.navigate(EventTabs, passedParams);

На данный момент все имеет смысл. Но TeamMembers также необходим доступ к passedParams. Я запутался, как передать это. Отсюда мой вопрос ... как получить доступ к passedParams из компонента TeamMembers? Они, кажется, ограничены только до EventTabs.

Если ответом будет использование navigate.setParams(), то я не уверен, где бы я это сделал.

Если ответом будет использование NavigationActions.setParams(), то я также не уверен, где бы я это сделал.

1 Ответ

0 голосов
/ 16 ноября 2018

К сожалению, у нас нет хорошей поддержки для этого, но вы могли бы использовать такую ​​функцию, чтобы рекурсивно обойти родителей навигации в поисках правильного параметра.

function getParam(navigation, paramName) {
  const { getParam, dangerouslyGetParent } = navigation;
  let parent = dangerouslyGetParent();
  let val = getParam(paramName);
  while (val === undefined && parent && parent.getParam) {
    val = parent.getParam(paramName);
    parent = parent.dangerouslyGetParent();
  }
  return val;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...