Подтвердить что ты не робот

Можно ли менять переходы в ответном натурном навигаторе?

У меня есть 3 разных реактивных компонента, и я использую Navigator для навигации между ними. В моем первом представлении я определяю навигатор:

Вид 1

<Navigator
    ref="nav"
    renderScene={@renderScene}
    initialRoute={@renderContent(I18n.t("Incidents"))}
    configureScene={ ->
      transition = Navigator.SceneConfigs.HorizontalSwipeJump
      transition.gestures = null
      transition
    }
  />

Как вы видите, переход - HorizontalSwipeJump.

Вид 2

 @props.navigator.push
  component: IncidentScreen
  incidentId: incident.id
  sceneConfig: -> Navigator.SceneConfigs.FloatFromBottomAndroid

Как вы можете видеть, я пытаюсь перейти в поле зрения № 3 с помощью FloatFromBottomAndroid, однако он не работает.

Изучая исходный код для RN, я вижу, что метод navigator.push получает анимацию из реквизита:

var nextAnimationConfigStack = activeAnimationConfigStack.concat([
  this.props.configureScene(route),
]);

Итак, что я могу сделать?

Большое спасибо.

4b9b3361

Ответ 1

Для списка SceneConfigs вам нужно перейти в исходный источник реакции , но здесь текущий список:

PushFromRight
FloatFromRight
FloatFromLeft
FloatFromBottom
FloatFromBottomAndroid
FadeAndroid
HorizontalSwipeJump
HorizontalSwipeJumpFromRight
VerticalUpSwipeJump
VerticalDownSwipeJump

Пример использования:

<Navigator
  configureScene={(route) => {
    if (someCondition) {
      return Navigator.SceneConfigs.HorizontalSwipeJump;
    } else {
      return Navigator.SceneConfigs.PushFromRight;
    }
  }}
/>

Ответ 2

Хорошо, я понимаю. Мне не хватало этой части в представлении 1:

configureScene={ (route) ->
      if route.sceneConfig
        route.sceneConfig
      else
        transition = Navigator.SceneConfigs.HorizontalSwipeJump
        transition.gestures = null
        transition
    }

Ответ 3

Если кто-то все еще смотрит на это, вы можете нажать без анимации, просто переведя маршруты в то, что вы хотите, чтобы они оказались. Это предполагает, что вы не делаете ничего особенного с вашими маршрутами, например, сохраняете маршруты вперед или что-то еще.

if( !shouldAnimate )
{
  var routeStack = this.refs.mainNav.state.routeStack;
  routeStack.push(newRoute);
  this.refs.mainNav.immediatelyResetRouteStack(routeStack);
}
else
{
  this.refs.mainNav.push(feature);
}

Где mainNav - это ссылка моего навигатора. Надеюсь, это поможет.