effector / effector/router

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

Open
#104 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
8
Forks
2
Avg merge
13h 44m
Merged PRs (30d)
1

Description

### 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

Инъекция фабрики с текущим поведением по умолчанию:

```ts
createStackNavigator({
router,
routes,
createNavigator: createNativeStackNavigator, // по умолчанию: @react-navigation/stack
});
```

Либо отдельный экспорт `createNativeStackNavigator` со своими типами опций:
наборы опций у рендереров разные (`cardStyle` / `animationEnabled` против
`animation` / `presentation`), поэтому общий тип `screenOptions` для обоих не
годится. Оба пакета React Navigation при этом становятся опциональными
peer-зависимостями. `StackActions.replace`, который синхронизация уже отправляет,
работает одинаково на обоих рендерерах.

### Package

`@effector/router-react-native`

Contributor guide

Open the contributing guide

Research direction

Start with packages/react-native/lib/stack-navigator.tsx and trace how createStackNavigator uses StackNavigatorConfig, createRouterSync, getScreenName, and createRouteListeners. Check index.ts exports and the package dependency declarations before deciding how the renderer factory and renderer-specific option types fit. Done means native-stack can be selected while the current renderer remains the default and both renderers' options stay correctly typed.

Written by the indexing model from the issue text.

Assessment

Tech stack
react-native, typescript
Domain
mobile
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
52/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.