首页 > 解决方案 > 如何在导航抽屉上执行注销按钮以将我重定向到登录页面?

问题描述

我正在创建一个小型反应本机应用程序,当我单击菜单抽屉上的按钮注销时,它应该通过传递一个名为“signOut”的函数将我重定向到登录页面,但它向我显示此错误:“t.signout 不是一个函数并且未定义”。顺便说一句,当我在其他页面上的其他按钮上调用该功能时它可以工作。

抽屉导航器代码:

const drawerNavigator= createDrawerNavigator({
  Chat: {screen: SettingsScreen},
  Profile: {screen: ProfileScreen},
},
{
  contentComponent:(props) => (
    <View style={{flex:1}}>
        <SafeAreaView forceInset={{ horizontal: 'never' }}>
            <DrawerItems {...props} />
            <Button title="Logout" onPress={ () => props.signOut() }/>
//even i tried: this.props.signOut()
        </SafeAreaView>
    </View>
  ),
    drawerOpenRoute: 'DrawerOpen',
    drawerCloseRoute: 'DrawerClose',
    drawerToggleRoute: 'DrawerToggle'
}

动作signOut的代码:

export const signOut = () => {
  return (dispatch, getState) => {

    firebase.auth().signOut().then(() => {
      dispatch({ type: 'SIGNOUT_SUCCESS' })
    });
  }
}

谢谢大家。

标签: react-nativenavigation-drawerexpo

解决方案


如果signOut函数在同一个屏幕上,

 signOut = () => {
  return (dispatch, getState) => {

    firebase.auth().signOut().then(() => {
      dispatch({ type: 'SIGNOUT_SUCCESS' })
    });
  }
}
...

const drawerNavigator= createDrawerNavigator({
  Chat: {screen: SettingsScreen},
  Profile: {screen: ProfileScreen},
},
{
  contentComponent:(props) => (
    <View style={{flex:1}}>
        <SafeAreaView forceInset={{ horizontal: 'never' }}>
            <DrawerItems {...props} />
            <Button title="Logout" onPress={ () => this.signOut() }/>
//even i tried: this.props.signOut()
        </SafeAreaView>
    </View>
  ),
    drawerOpenRoute: 'DrawerOpen',
    drawerCloseRoute: 'DrawerClose',
    drawerToggleRoute: 'DrawerToggle'
}

如果它在另一个屏幕上,

export function signOut(){
  return (dispatch, getState) => {

    firebase.auth().signOut().then(() => {
      dispatch({ type: 'SIGNOUT_SUCCESS' })
    });
  }
}
...
import { signOut } from 'signoutscreen'
const drawerNavigator= createDrawerNavigator({
  Chat: {screen: SettingsScreen},
  Profile: {screen: ProfileScreen},
},
{
  contentComponent:(props) => (
    <View style={{flex:1}}>
        <SafeAreaView forceInset={{ horizontal: 'never' }}>
            <DrawerItems {...props} />
            <Button title="Logout" onPress={ () => signOut() }/>
//even i tried: this.props.signOut()
        </SafeAreaView>
    </View>
  ),
    drawerOpenRoute: 'DrawerOpen',
    drawerCloseRoute: 'DrawerClose',
    drawerToggleRoute: 'DrawerToggle'
}

推荐阅读