Firebase v9+React JS项目出现indexOf is not a function报错如何解决
错误原因
- 核心是你调用
doc()函数时的传参不符合Firebase v9 Modular版本的API规范:doc()仅接受「父集合引用 + 文档ID字符串」的组合作为路径参数,你传入的where("uid", "==", currentUser)返回的是Query类型对象,不是字符串。Firebase内部尝试对这个Query对象调用字符串方法indexOf解析路径时,就抛出了n.indexOf is not a function的类型错误。 - 额外逻辑误区:你已经持有刚创建的分类文档引用
newDocRef,完全不需要额外加查询条件再去找这个文档,刚生成的文档ID已经可以直接使用。
修复方案
根据你的业务需求(在新建分类下生成测试任务),正确逻辑应该是把测试任务存为分类文档的子集合文档,修正后的代码如下:
const currentUser = '1234' const crearCategoria = useCallback(async() => { try { const newDocRef = doc(collection(db, "categorias")); await setDoc(newDocRef, { name: categoryName, uid: currentUser, projectId: newDocRef.id }) // 修正:从新建的分类文档下获取tasks子集合,生成任务文档引用 const taskRef = doc(collection(newDocRef, "tasks")) await setDoc(taskRef, { name: 'prueba', uid: currentUser, projectId: newDocRef.id }) } catch (error) { console.log(error) } })
如果你确实需要把任务和分类存在同级的categorias集合下,也只需要直接传文档ID即可,不需要加where条件:
// 同级存储的写法(不推荐,会导致集合数据类型混乱) const taskRef = doc(collection(db, "categorias"))
内容的提问来源于stack exchange,提问作者iandev
相关产品推荐
相关产品推荐

