React Native调用firebase.database()报is not function错误解决方案问询
问题解答
根因说明
你当前使用的是 Firebase v9+ 版本的兼容(compat)套件,该版本的设计逻辑是:所有服务类依赖(比如实时数据库、认证、云存储等)在被导入时,会自动向firebase/compat/app导出的全局 Firebase 实例注册对应服务的调用方法,不需要你显式使用导入的服务变量。
你未导入firebase/compat/database时,全局 Firebase 实例上没有挂载database()方法,因此触发报错;导入该依赖后,实时数据库服务完成注册,firebase.database()方法即可正常调用,和你是否用到导入的database变量没有关联。
正确导入操作
方案1:继续使用compat兼容模式(适配旧版本写法)
仅需要两步操作即可正常使用firebase.database():
- 导入Firebase核心compat包
import firebase from 'firebase/compat/app'
- 导入实时数据库compat包,无需声明接收变量也可生效:
// 两种写法均可,不需要用到导入的database变量时,第一种写法即可 import 'firebase/compat/database' // 你之前的写法也完全兼容 // import database from 'firebase/compat/database'
*注意:必须在调用firebase.database()前,先调用firebase.initializeApp(你的Firebase项目配置)完成初始化,建议将初始化逻辑放在项目入口文件或单独的Firebase配置文件中即可。
方案2:使用新版模块化API(更推荐,可有效减少包体积)
如果没有兼容旧代码的需求,更建议使用Firebase v9+推出的模块化API,导入和使用方式如下:
// 导入核心依赖 import { initializeApp } from 'firebase/app' // 导入实时数据库相关方法 import { getDatabase, ref, once } from 'firebase/database' // 初始化 const firebaseApp = initializeApp(你的Firebase配置) // 获取数据库实例 const db = getDatabase(firebaseApp) // 调用示例 const userRef = ref(db, 'Users') once(userRef, 'value', (snap) => { let profiles = [] snap.forEach((profile) => { const {name, bio, birthday, id} = profile.val() profiles.push({name, bio, birthday, id}) }) // 后续状态操作 })
内容的提问来源于stack exchange,提问作者user17440201
相关产品推荐
相关产品推荐

