只有一些导航器的不变违规(React-Navigation)

Posted

技术标签:

【中文标题】只有一些导航器的不变违规(React-Navigation)【英文标题】:Invariant Violation with only some Navigators (React-Navigation) 【发布时间】:2018-11-02 14:32:36 【问题描述】:

在尝试从 React-Navigation 实现导航器时,我遇到了一些奇怪的行为。

从https://reactnavigation.org/docs/en/hello-react-navigation.html尝试简单的“hello world”时...

import React from 'react';
import  View, Text  from 'react-native';
import  createStackNavigator  from 'react-navigation';

class HomeScreen extends React.Component 
  render() 
    return (
      <View style= flex: 1, alignItems: 'center', justifyContent: 'center' >
        <Text>Home Screen</Text>
      </View>
    );
  


export default createStackNavigator(
  Home: 
    screen: HomeScreen,
  ,
);

我收到此错误:

Invariant Violation:元素类型无效:期望字符串(对于内置组件)或类/函数(对于复合组件),但得到:对象。 检查'SceneView'的渲染方法。

奇怪的是,在使用 StackNavigator(和 TabNavigator)时,我会遇到 Invariant Violation,而使用 DrawerNavigator 却不会!

This common fix (removing the braces in the import) gives a new error:

对象不是函数

And the common fix to "Object is not a function" leads me back to where I started (adding braces to the import).

我是 React-Native 的新手,不知道如何深入研究这个问题,感谢任何帮助!

-----编辑-----

我已将我的 react-navigation 版本降级到 v1.5.5 并且原始 StackNavigator 组件可以正常工作,所以这可能是与 v2.0.1 和我的环境的兼容性问题。

【问题讨论】:

【参考方案1】:

我可能发现了您的问题。我认为您正在尝试遵循错误版本的文档。我假设你使用的是 React-Navigation V1。

您可以通过在项目根目录中的终端中运行“yarn list react-navigation”来查看当前安装的版本。

V1 文档:https://v1.reactnavigation.org/docs/hello-react-navigation.html

如果我使用上面链接中的示例,一切正常。或许你可以试试?

标记

【讨论】:

嗨,马克,告诉我有 -react-navigation@2.0.1 尝试使用旧的“StackNavigator”给了我一个警告,它已被弃用并改用“createStackNavigator”。【参考方案2】:

如果您的react-native 具有正确的react 版本,请检查package.json。例如,

"react": "16.4.0",
"react-native": "^0.53",
"react-navigation": "^2.0.4",

不适合我,但是

"react": "16.2.0",
"react-native": "^0.53",
"react-navigation": "^2.0.4",

有效。

【讨论】:

不知道为什么没有更多的支持。解决了我的问题 这是我发现的最奇怪的错误,浪费了我 3 个小时的时间。我的package.json 中有"react": "^16.2.0",但意识到它正在解析为16.6.3 并导致此错误。回滚到 "16.2.0" 为我修复了这个错误。

以上是关于只有一些导航器的不变违规(React-Navigation)的主要内容,如果未能解决你的问题,请参考以下文章

不变违规:此导航器缺少导航道具

react-navigation:使用 Expo.addListener 在推送通知中导航的不变违规

不变违规:当元素在 DOM 中时,目标容器不是 DOM 元素

运行测试时获取“不变违规:本机模块不能为空。”

反应错误 - 未捕获的不变违规:元素类型无效

不变违规:无法在未安装的组件上找到节点。阿波罗