反应原生this.props.navigation在主APP中未定义

时间:2018-06-28 09:36:20

标签: react-native

我尝试在主要的本机App中使用“ this.props.navigation”,但未定义。在TabNavigator和ScreenNavigator随附的其他组件中,它可以正常工作。

我的App.js

allocate: 0x1e4c990 (1) 
MyException constructed.
allocate: 0x1e4ddb0 (1) 
MyException constructed.
MyException destroyed.
free: 0x1e4e1b0
MyException destroyed.
free: 0x1e4cd90
-----------
allocate: 0x1e4c990 (1) 
MyException constructed.
allocate: 0x1e4ddb0 (1) 
MyException constructed.
MyException destroyed.
free: 0x1e4e1b0
MyException destroyed.
free: 0x1e4cd90
-----------
allocate: 0x1e4c990 (1) 
MyException constructed.
allocate: 0x1e4ddb0 (1) 
MyException constructed.
MyException destroyed.
free: 0x1e4e1b0
MyException destroyed.
free: 0x1e4cd90
-----------

2 个答案:

答案 0 :(得分:1)

navigation属性仅适用于导航堆栈中的组件或使用withNavigation HOC的子组件。

答案 1 :(得分:1)

您的App类未包含在Navigator堆栈中,因此,导航器类无法为其提供任何导航道具,这就是为什么您遇到undefined错误的原因因为navigation对象不存在。

此外,如果您需要打开<Tutorial/>作为第一个屏幕,请将其作为StackNavigator中的第一个元素。这样,将始终被首先调用。

PS:您可以另外向不同的组件提供navigation={this.props.navigation}元素,这些元素不必包含在导航器类中。例如,您需要打开一个dropdown元素,该元素提供了一个退出选项,可以导航到主屏幕。在此用例中,最好像问题中提供的那样提供navigation道具。但是需要注意,提供道具的类应该存在对象

编辑

根据您的要求,您需要为打开的每个屏幕显示一个教程。您可以通过两种方法来做到这一点。

  1. 您的方式-您可以在堆栈导航器中声明它。但是您的<Tutorial/>组件将包含多个条件来检查路线并显示适当的数据(这就是我现在能想到的)。
  2. 您可以声明一个公共组件,该组件仅以模式显示消息。然后,您可以为每个组件声明一个可选的道具,并且在每个组件中,可以检查此可选道具是否存在,可以显示您的公共显示<Tutorial/>组件。

这是我目前能想到的。如果我有更多的想法会更新:)

希望这个答案。