react-native - 无法创建自定义 StackNavigator - “无法注册导航器”?
问题描述
我正在尝试创建一个自定义 StackNavigator 并将其分发到自定义包上。问题是当我想应用我的自定义堆栈时,我收到以下错误:
错误:无法注册导航器。您是否使用“NavigationContainer”包装了您的应用程序?
这是我的 App.tsx:
import { createThemedStack } from '@my-custom-package'
//this is the reference to my custom navigator
const ThemedStack = createThemedStack()
function App() {
return (
<NavigationContainer>
<ThemedStack.Navigator>
<ThemedStack.Screen name='Screen 1' component={Screen1} />
<ThemedStack.Screen name='Screen 2' component={Screen2} />
...
</ThemedStack.Navigator>
</NavigationContainer>
)
}
export default App
ThemedStack.tsx - 在这里我想将一些自定义的常用样式应用于堆栈:
import * as React from 'react'
import { useNavigationBuilder, createNavigatorFactory, StackRouter } from '@react-navigation/native'
import { StackView } from '@react-navigation/stack'
// @ts-ignore
function ThemedStack({ initialRouteName, children, screenOptions, ...rest }) {
const { state, descriptors, navigation } = useNavigationBuilder(StackRouter, {
initialRouteName,
children,
screenOptions,
})
return <StackView {...rest} state={state} navigation={navigation} descriptors={descriptors} />
}
export default createNavigatorFactory(ThemedStack)
我究竟做错了什么?我不明白。ThemedStack 导航器位于 NavigationContainer 内。
我是根据https://reactnavigation.org/docs/custom-navigators/ RN Navigation docs 进行的,尽管他们没有说明在外部包结构中执行此操作。
提前致谢 :)
解决方案
听起来你@react-navigation/native
的包中有依赖项,导致安装了多个版本。你应该把它移到peerDependencies
.
推荐阅读
- bundle - Parcel 构建过程和创建文件
- javascript - 按空格和换行符拆分多行文本
- jmeter - JSR223 采样器优化
- javascript - Javascript:Span contentEditable 作为输入(占位符替代)
- ruby-on-rails - 阻止用户进入某个页面,直到在 vue 中满足条件
- python - 如何根据属性值获取类中的项目列表
- html - 引导导航栏的绝对定位会干扰项目的对齐
- python - 错误:Spider 必须返回 Request、BaseItem、dict 或 None,得到 'tuple'
- karate - 快速空手道 POST 请求建议
- linux-kernel - 使用 clang-r383902 为 Android 11 (R) Beta 版本 1 编译 Linux 内核时出错