[Feature]: Support @react-navigation/native-stack in createStackNavigator
- 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
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