Problem
createStackNavigator жёстко зашивает JS-рендерер — в
packages/react-native/lib/stack-navigator.tsx стоит
import { createStackNavigator } from '@react-navigation/stack'.
@react-navigation/native-stack использовать нельзя, хотя оба пакета работают на
одном StackRouter — это выбор рендерера, а не маршрутизации. Приложение на
native-stack (дефолт в текущих шаблонах RN) вынуждено добавлять новую зависимость
и терять системные переходы, свайп назад и нативное отсоединение экранов.
Обойти нечем: StackNavigatorConfig — это
{ router, routes, screenOptions, initialRouteName }, а createRouterSync,
getScreenName и createRouteListeners не экспортируются из index.ts.
Proposed solution
Инъекция фабрики с текущим поведением по умолчанию:
createStackNavigator({
router,
routes,
createNavigator: createNativeStackNavigator, // по умолчанию: @react-navigation/stack
});
Либо отдельный экспорт createNativeStackNavigator со своими типами опций:
наборы опций у рендереров разные (cardStyle / animationEnabled против
animation / presentation), поэтому общий тип screenOptions для обоих не
годится. Оба пакета React Navigation при этом становятся опциональными
peer-зависимостями. StackActions.replace, который синхронизация уже отправляет,
работает одинаково на обоих рендерерах.
Package
@effector/router-react-native
Problem
createStackNavigatorжёстко зашивает JS-рендерер — вpackages/react-native/lib/stack-navigator.tsxстоитimport { createStackNavigator } from '@react-navigation/stack'.@react-navigation/native-stackиспользовать нельзя, хотя оба пакета работают наодном
StackRouter— это выбор рендерера, а не маршрутизации. Приложение наnative-stack (дефолт в текущих шаблонах RN) вынуждено добавлять новую зависимость
и терять системные переходы, свайп назад и нативное отсоединение экранов.
Обойти нечем:
StackNavigatorConfig— это{ router, routes, screenOptions, initialRouteName }, аcreateRouterSync,getScreenNameиcreateRouteListenersне экспортируются изindex.ts.Proposed solution
Инъекция фабрики с текущим поведением по умолчанию:
Либо отдельный экспорт
createNativeStackNavigatorсо своими типами опций:наборы опций у рендереров разные (
cardStyle/animationEnabledпротивanimation/presentation), поэтому общий типscreenOptionsдля обоих негодится. Оба пакета React Navigation при этом становятся опциональными
peer-зависимостями.
StackActions.replace, который синхронизация уже отправляет,работает одинаково на обоих рендерерах.
Package
@effector/router-react-native