Firebase 9如何链式调用addDoc等方法向collection集合添加文档
Firebase 9 链式调用写法适配解答
是否可以沿用旧版链式调用写法?
可以实现,有两种可选方案:
- 方案1:使用Firebase 9官方提供的兼容版(compat)SDK
这是官方推出的平滑升级适配方案,完全支持旧版链式调用API,无需修改原有业务代码,操作步骤如下:- 将SDK导入路径替换为compat版本:
// 替换原有模块化导入路径 import firebase from "firebase/compat/app" import "firebase/compat/firestore" // 初始化逻辑和旧版完全一致 const app = firebase.initializeApp({/* 你的Firebase配置项 */}) const db = app.firestore()- 直接使用原有的链式写法即可:
const myNewDoc = await db.collection('some-collection-name').add({ // Document details here... }); - 方案2:原生模块化SDK下手动扩展原型(不推荐生产环境使用)
如果不想使用compat版本,可以通过扩展CollectionReference原型的方式自定义链式方法,TypeScript环境需要先声明类型避免报错:
配置完成后即可直接调用链式import { addDoc, CollectionReference, DocumentData, DocumentReference } from "firebase/firestore" // 声明类型扩展 declare module "firebase/firestore" { interface CollectionReference<T = DocumentData> { add: (data: T) => Promise<DocumentReference<T>> } } // 实现扩展方法 CollectionReference.prototype.add = function(data) { return addDoc(this, data) }add方法,注意:该方案属于非官方hack,后续SDK版本升级可能出现兼容性问题
是否应该使用addDoc?
addDoc是Firebase 9原生模块化SDK的官方标准API,推荐优先使用:
- 模块化API支持摇树优化,可以大幅减少最终打包体积,对Web端性能提升明显
- 是官方后续长期维护的API版本,新特性都会优先在模块化SDK上提供
- 兼容版SDK仅作为过渡方案存在,官方已经明确后续大版本会逐步停止对compat版本的维护,长期迭代的项目建议逐步适配原生函数式写法
内容的提问来源于stack exchange,提问作者TinyTiger
相关产品推荐
相关产品推荐

