Skip to content

[Feature]: Support @react-navigation/native-stack in createStackNavigator #104

Description

@warbr1ng3r

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions