native.createnavigator 工厂不是函数

Posted

技术标签:

【中文标题】native.createnavigator 工厂不是函数【英文标题】:native.createnavigator factory is not a function 【发布时间】:2020-05-22 00:55:19 【问题描述】:

我要在我的项目中设计一个抽屉式导航。

我通过这个命令安装了它:

npm install @react-navigation/drawer

然后将其导入App.js

import  createDrawerNavigator  from '@react-navigation/drawer';
import  NavigationContainer  from '@react-navigation/native';

这是我的package.json 内容:

"@react-native-community/masked-view": "^0.1.6",
"@react-navigation/drawer": "^5.0.0",
"react": "16.9.0",
"react-native": "0.61.5",
"react-native-gesture-handler": "^1.5.6",
"react-native-reanimated": "^1.7.0",
"react-native-screens": "^2.0.0-beta.1",
"react-native-view-shot": "^3.0.2",
"react-navigation": "^4.1.1",
"react-navigation-stack": "^2.1.0",

这是我的App.js 内容:

const App = () => 
  const Drawer = createDrawerNavigator();
  return (
    <View style=styles.container>
      <NavigationContainer>
        <Drawer.Navigator initialRouteName="login">
          <Drawer.Screen name="login" component=Login />
          <Drawer.Screen name="second" component=SecondPage />
        </Drawer.Navigator>
      </NavigationContainer>
    </View>
  )
;

我应该说我已经创建了LoginSecondPage 组件并在一个名为root.js 的文件中声明了它们

import  createAppContainer  from 'react-navigation';
import  createStackNavigator  from 'react-navigation-stack';
import  Login, Header, SecondPage, Footer, ThirdPage  from './components/index';

const AppNavigator = createStackNavigator(
  login:  screen: Login ,
  header:  screen: Header ,
  second:  screen: SecondPage ,
  footer:  screen: Footer ,
  third:  screen: ThirdPage 
, 
  initialRouteName: 'login',
  headerMode: 'none',
  mode: 'modal',
, );

export default createAppContainer(AppNavigator);

但我遇到了一个错误(跟随屏幕)。

我该如何解决这个问题?

index.js

export * from './login';
export * from './header';
export * from './secondpage';
export * from './footer';
export * from './thirdpage';

【问题讨论】:

我遇到了同样的问题,重新运行 - npm install @react-navigation/native 解决了问题 非常感谢,问题已解决,您知道如何更改抽屉样式吗?我的意思是背景颜色等... 感谢 @LironSher 更新 @react-navigation/native 为我工作 【参考方案1】:

您在项目中同时结合了 React Navigation 4 和 React Navigation 5。无效。

React Navigation 4 包:react-navigationreact-navigation-stackreact-navigation-drawer

React Navigation 5 包:@react-navigation/native@react-navigation/stack@react-navigation/drawer

遵循官方文档并使用正确的软件包版本和语法https://reactnavigation.org/docs/en/getting-started.html

基本上删除您在root.js 中的代码并像这里https://reactnavigation.org/docs/en/stack-navigator.html 一样创建堆栈导航器

【讨论】:

【参考方案2】:
npm install --save @react-navigation/native

之后重新运行

npm install @react-navigation/native

它对我有用。我希望,它会在你的情况下工作

【讨论】:

【参考方案3】:

尝试安装: 纱线添加反应导航堆栈

和依赖项: yarn add react-native-gesture-handler react-native-reanimated react-native-screens react-native-safe-area-context @react-native-community/masked-view

在您的路线中: 从 'react-navigation-stack' 导入 createStackNavigator ;

【讨论】:

【参考方案4】:

我不明白你现在想做什么。我想你想添加一个抽屉导航器。

您的问题是您必须使用一个容器,但您有两个,而 createStackNavigator 有两个参数,但您有三个。

createStackNavigator(RouteConfigs, StackNavigatorConfig);

我认为你的导航器结构应该如下。

Drawers.js

export default const Drawers = () => 
  const Drawer = createDrawerNavigator();
  return (
        <Drawer.Navigator initialRouteName="login">
          <Drawer.Screen name="login" component=Login />
          <Drawer.Screen name="second" component=SecondPage />
        </Drawer.Navigator>
  )
;

App.js

import Drawers from "./Drawers"
...

const AppNavigator = createStackNavigator(
  login:  screen: Drawers ,
  header:  screen: Header ,
  second:  screen: SecondPage ,
  footer:  screen: Footer ,
  third:  screen: ThirdPage 
, 
  initialRouteName: 'login',
  headerMode: 'none',
  mode: 'modal',
);

export default createAppContainer(AppNavigator)

index.js

import Login from './login';
import Header from './header';
import SecondPage from './secondpage';
import Footer from './footer';
import ThirdPage from './thirdpage';

export  Login, Header, SecondPage, Footer, ThirdPage

此问题可能是与版本的兼容性问题。 React-NavigationStackNavigator 版本必须是最新的。

【讨论】:

我现在尝试了你的解决方案,不幸的是它不起作用 确定这是 index.js 内容:``` export * from './login';从'./header'导出*;从'./secondpage'导出*;从'./footer'导出*;从'./thirdpage'导出*; ``` 对不起哥们,请看看这个imgur.com/a/SMhjl4i @roz333 看看我改过的答案。尝试像这样更改“index.js”。 我做了,但发生了同样的错误,我猜应该是抽屉语法有问题,他们最近改变了抽屉方法,互联网上没有任何新方法的教程。【参考方案5】:

卸载 @react-navigation/native 并重新安装对我有用。

【讨论】:

您在这里指的是其他答案吗?您的帖子的措辞类似于“谢谢”。但我不知道为什么......【参考方案6】:

Index.js 内容

export * from './login';
export * from './header';
export * from './secondpage';
export * from './footer';
export * from './thirdpage';

【讨论】:

以上是关于native.createnavigator 工厂不是函数的主要内容,如果未能解决你的问题,请参考以下文章

工厂模式,简单工厂模式,抽象工厂模式三者有啥区别

工厂、抽象工厂和工厂方法

简单工厂工厂方法抽象工厂区别

简单工厂工厂抽象工厂

工厂模式:简单工厂工厂方法抽象工厂

简单工厂,抽象工厂,工厂模式三者的对照