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

Scala.js导入react-native-fbsdk-next类及静态函数失败,求解决

问题:Scala.js导入React Native第三方库类的静态方法失败

我在第三方库react-native-fbsdk-next的FBAccessToken.ts文件中,有如下包含实例成员和静态方法的类:

class FBAccessToken {

  accessToken: string;
  permissions: Array<string>;

  static getCurrentAccessToken() {
    return new Promise<FBAccessToken | null>((resolve) => {
    ...
    }
  }
}

export default FBAccessToken;

我需要同时导入该类的实例成员以及静态方法,于是用Scala类和伴生对象实现,代码如下:

@native
  @JSImport("react-native-fbsdk-next", "FBAccessToken")
  class FBAccessToken extends js.Object {
    def accessToken: String = native
    def permissions: Array[String] = native
  }

  @native
  @JSImport("react-native-fbsdk-next", "FBAccessToken")
  object FBAccessToken extends js.Object {
    def getCurrentAccessToken: Promise[FBAccessToken | Null] = native
  }

但静态方法导入失败了,sbt fastOptJs编译通过,但在模拟器运行应用时出现如下错误:

TypeError: undefined is not an object (evaluating '_$$_REQUIRE(_dependencyMap[4], "react-native-fbsdk-next").FBAccessToken.getCurrentAccessToken')

请问我哪里操作出错了?


解决方案

问题出在JS模块的导入方式上:原JS模块是默认导出(export default FBAccessToken),而非命名导出,但你在Scala.js中用了命名导入的写法(@JSImport("react-native-fbsdk-next", "FBAccessToken"))。

在JS中,默认导出的内容会挂载在模块的default属性上,而非直接作为模块的顶层属性。你当前的写法相当于尝试访问require("react-native-fbsdk-next").FBAccessToken,但实际正确的访问路径是require("react-native-fbsdk-next").default——这才是包含静态方法的类本身。

正确的导入代码应该修改为:

// 实例类导入,使用JSImport.Default指定默认导出
@native
@JSImport("react-native-fbsdk-next", JSImport.Default)
class FBAccessToken extends js.Object {
  def accessToken: String = native
  def permissions: Array[String] = native
}

// 伴生对象同样导入默认导出,因为静态方法属于默认导出的类本身
@native
@JSImport("react-native-fbsdk-next", JSImport.Default)
object FBAccessToken extends js.Object {
  def getCurrentAccessToken: js.Promise[FBAccessToken | Null] = native
}

修改后,Scala.js会生成正确访问默认导出的代码,就能正常调用类的静态方法了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:01:29