Undefined 不是 _reactNavigation.StackNavigator 附近的函数

Posted

技术标签:

【中文标题】Undefined 不是 _reactNavigation.StackNavigator 附近的函数【英文标题】:Undefined is not a function near _reactNavigation.StackNavigator 【发布时间】:2019-05-27 17:29:06 【问题描述】:

我想同时设置一个带有side menutab menuReact Native 应用程序。

我在关注this 教程。

My code.

我得到错误:

undefined 不是函数('...(0 , _reactNavigation.TabNavigator)...' 附近)

你可以在这里看到:

部分文件预览:

App.js

import React from 'react';
import  Drawer  from './src/navigators';

export default class App extends React.Component 
  render() 
    return (
      <Drawer />
    );
  

navigators.js

import React,  Component  from 'react';
import 
  StyleSheet,
  Text,
  View
 from 'react-native';

// Navigators
import  DrawerNavigator, StackNavigator, TabNavigator  from 'react-navigation'

// StackNavigator screens
import ItemList from './ItemList'
import Item from './Item'

// TabNavigator screens
import TabA from './TabA'
import TabB from './TabB'
import TabC from './TabC'

// Plain old component
import Plain from './Plain'

export const Stack = StackNavigator(
  ItemList:  screen: ItemList ,
  Item:  screen: Item ,
, 
  initialRouteName: 'ItemList',
)

export const Tabs = TabNavigator(
  TabA:  screen: TabA ,
  TabB:  screen: TabB ,
  TabC:  screen: Stack ,
, 
  order: ['TabA', 'TabB', 'TabC']
)

export const Drawer = DrawerNavigator(
  Stack:  screen: Stack ,
  Tabs:  screen: Tabs ,
  Plain:  screen: Plain ,
)

【问题讨论】:

【参考方案1】:

您从 React Navigation 中导入的内容对于您使用的版本 (3.0.9) 不正确。那些命名的导出在 v1 之后重命名,这就是您所遵循的教程所使用的。

您正在导入:

import  DrawerNavigator, StackNavigator, TabNavigator  from 'react-navigation';

当您需要这样导入它们时:

import 
    createDrawerNavigator,
    createStackNavigator,
    createBottomTabNavigator,
    createAppContainer,
 from 'react-navigation';

您还需要将根导航器(在本例中为抽屉导航器)包装在 createAppContainer 中。

像这样:

export const Drawer = createAppContainer(
  createDrawerNavigator(
    Stack:  screen: Stack ,
    Tabs:  screen: Tabs ,
    Plain:  screen: Plain ,
  )
);

如果您想快速修复,只需进入您的 package.json 并替换 React Navigation from "react-navigation": "^3.0.9" to "react-navigation": "^1.5.2" 和 Snack 的版本将按预期运行https://snack.expo.io/@chris-bytelion/react-s

【讨论】:

谢谢@ChrisPoe。我更喜欢使用最新版本的react-navigation。我改用函数尝试了您的方法,但仍然出现错误。这是snack.expo.io 项目。你能解决这个问题吗? snack.expo.io/rksUWzDZE 并给我解决方案?谢谢! @davidesp 确定所有已修复snack.expo.io/@chris-bytelion/react-s。您收到该错误是因为 createTabNavigator 在较新版本中不是导入选项。您的选项是createBottomTabNavigatorcreateMaterialBottomTabNavigatorcreateMaterialTopTabNavigator,如下所述:reactnavigation.org/docs/en/tab-based-navigation.html。此外,在您的 app.js 中确保您导入 AppNavigator 而不是 Drawer,因为您使用 createAppContainer 包装了根导航器。 乐于助人! @davidesp【参考方案2】:

在我的情况下,修复是这样的:

"react-navigation": "^1.5.2"

在 package.json 中。

【讨论】:

以上是关于Undefined 不是 _reactNavigation.StackNavigator 附近的函数的主要内容,如果未能解决你的问题,请参考以下文章

Expo SDK32 undefined 不是对象(评估 '_expo2.default.KeepAwake')

undefined 不是试图在组件中使用 setTimeout 的对象(评估“fun.__callAsync”)

undefined不是对象(评估'_effects.buffers.expanding')

React native Undefined 不是对象(评估'_react3.default.PropType.shape')?

React Native错误:undefined不是对象(评估'_this2.props.navigation.navigate')

ReactJs undefined 不是函数