在DrawerNavigator中反应Native Logout

Mak*_*aki 8 react-native stack-navigator

我想从DrawerNav导航回登录.在函数内使用alert('Alert')就可以了.

我有一个带Login和DrawerNav的StackNavigator

const MyStackNavigator = StackNavigator({
  Login : { screen : Login },
  DrawerNav : { screen : DrawerNav }
  }, {
    navigationOptions : { header : false }
  }
);
Run Code Online (Sandbox Code Playgroud)

从登录我可以导航到我的主屏幕DrawerNav使用

_login = () => {
  this.props.navigation.navigate('DrawerNav');
}
Run Code Online (Sandbox Code Playgroud)

DrawerNav里面是DrawerNavigator(显然)

const MyDrawerNavigator = DrawerNavigator({
    ... screens ...
  }, {
    initialRouteName : '',
    contentComponent : CustomContent,
    drawerOpenRoute : 'DrawerOpen',
    drawerCloseRoute : 'DrawerClose',
    drawerToggleRoute : 'DrawerToggle'
  }
);

const CustomContent = (props) => (
    <View>
      <DrawerItems {...props} />
      <TouchableOpacity
        onPress={ this._logout }>
        <Text style={ styles.logout }>Logout</Text>
      </TouchableOpacity>
   </View>
)
Run Code Online (Sandbox Code Playgroud)

如您所见,注销不是菜单的一部分,而是在抽屉内

_logout = () => {
  this.props.navigation.navigate('Login');
}
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误

undefined is not an object (evaluating '_this.props.navigation')
Run Code Online (Sandbox Code Playgroud)

riw*_*iwu 0

问题

in旨在引用实例,但由于它this是一个功能组件(没有实例),因此任何引用都不应该有效,但不会因bug而引发错误。this._logoutCustomContentCustomContentthis

解决方案

改变

onPress={this._logout}
Run Code Online (Sandbox Code Playgroud)

onPress={() => props.navigation.navigate('Login')}
Run Code Online (Sandbox Code Playgroud)