You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expo Facebook登录成功后无法跳转至首页问题求助

解决Expo Facebook登录后无法跳转首页的问题

看起来你已经把Facebook登录的核心逻辑跑通了,问题出在导航的调用方式上!我帮你揪出两个关键问题:

问题1:导航函数没有实际执行

你的navigateToScreen是一个返回函数的高阶函数,直接调用this.navigateToScreen('Home')只是拿到了导航函数,并没有真正触发导航动作,必须再加一对括号执行它(或者调整函数写法)。

问题2:未定义的navigateAction变量

你在FBlogIn里写了this.props.navigation.dispatch(navigateAction);,但navigateAction是navigateToScreen函数内部的局部变量,这里根本访问不到,这行代码会直接报错,打断后续逻辑。

修复后的完整代码

export default class LoginScreen extends Component { 
  navigateToScreen = (route, params = {}) => { 
    const navigateAction = NavigationActions.navigate({ routeName: route, params }); 
    this.props.navigation.dispatch(navigateAction); 
  } 

  // facebook login 
  FBlogIn = async () => { 
    try { 
      await Facebook.initializeAsync({ 
        appId: '[my app id is here]', 
      }); 
      const { type, token, expires, permissions, declinedPermissions } = await Facebook.logInWithReadPermissionsAsync({ 
        permissions: ["public_profile"] 
      }); 
      if (type === "success") { 
        // Get the user's name using Facebook's Graph API 
        const response = await fetch( 
          `https://graph.facebook.com/me?access_token=${token}` 
        ); 
        Alert.alert("Logged in!", `Hi ${(await response.json()).name}!`); 
        // 直接调用导航函数触发跳转
        this.navigateToScreen('Home'); 
      } else { 
        alert(`Facebook Login Error: Cancelled`); 
      } 
    } catch ({ message }) { 
      alert(`Facebook Login Error: ${message}`); 
    } 
  }; 

  render() { // 这里你之前漏了大括号,得补上才能正常渲染
    return ( 
      {/* for facebook signin */} 
      <Button rounded block onPress={this.FBlogIn} style={styles.button_start} activeOpacity={1}> 
        <Text style={{ color: '#222222', fontWeight: 'bold', fontSize: 14 }}>Login with Facebook</Text> 
      </Button> 
    )
  }
}

额外优化建议

其实你可以不用自己封装navigateToScreen,直接用React Navigation提供的更简洁的方式,代码会更直观:

// 去掉navigateToScreen方法,登录成功后直接写这行
this.props.navigation.navigate('Home');

另外还要确认你的导航容器配置里确实存在Home这个路由名称,避免因为拼写错误导致跳转失败。

内容的提问来源于stack exchange,提问作者Bruce Mathers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:24:24