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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:45:06