Можно ли менять переходы в ответном натурном навигаторе?
У меня есть 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),
]);
Итак, что я могу сделать?
Большое спасибо.
Ответы
Ответ 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 - это ссылка моего навигатора. Надеюсь, это поможет.