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

删除Firebase关联用户UID的嵌套对象时出现reading 'id' undefined报错如何解决

问题解决方法

根因说明

共3个核心问题导致报错:

  • v-for的key使用了整个gig对象,导致Vue列表项识别异常,触发deleteGigs时传入的gig不是预期对象,读取id时报undefined
  • 删除操作的Firebase路径缺失用户UID层级,匹配不到要删除的记录
  • 登录态回调中未存储当前用户信息,无法获取用户UID拼接删除路径

分步修改方案

1. 修正模板v-for的key属性

把原模板中v-for对应的行替换为以下代码:

<div
  class="Amodule  back"
  v-for="gig in allGigs"
  :key="gig.id"
>

2. 修正created钩子,存储当前登录用户信息

在onAuthStateChanged回调拿到有效用户时,先赋值给authUser,同时给child_removed事件加空值判断避免报错:

created: function() {
  firebase.auth().onAuthStateChanged(user => {
    if (user) {
      // 新增这行,存储当前登录用户信息
      this.authUser = user
      gigRef.child(user.uid).on('child_added', snapshot => {
          this.allGigs.push({...snapshot.val(), id: snapshot.key})
          if (snapshot.val().user !== this.authUser) {
              nativeToast({
                  message: `New message by ${snapshot.val().authUser}`,
                  type: 'success'
              })
          }
      })
      gigRef.child(user.uid).on('child_removed', snapshot => {
          const deleteGigs = this.allGigs.find(gig => gig.id === snapshot.key)
          // 新增空值判断,避免找不到对应记录时报错
          if (deleteGigs) {
            const index = this.allGigs.indexOf(deleteGigs)
            this.allGigs.splice(index, 1)
          }
          if (snapshot.val().user !== this.authUser) {
              nativeToast({
                  message: `Gig deleted by ${snapshot.val().authUser}`,
                  type: 'warning'
              })
          }
      })
    }
 })
}

3. 修正deleteGigs删除方法,补全Firebase路径

methods: {
  async deleteGigs(gig) {
    // 空值校验,避免非法调用报错
    if (!gig?.id || !this.authUser?.uid) return
    try {
      // 补全用户UID层级,路径匹配数据结构 gigs/用户UID/记录ID
      await gigRef.child(this.authUser.uid).child(gig.id).remove()
      console.log("删除成功,记录ID:"+gig.id)
    } catch (err) {
      console.error("删除失败:", err)
    }
  }
}

额外检查项

新增数据逻辑中,确认存储节点和读取节点一致。如果你的gig数据是存在gigs节点下,新增代码中的messagesRef需要替换为gigRef,避免存错节点:

// 原代码
// messagesRef.child(this.newGig.userID).push(this.newGig);
// 修改为
gigRef.child(this.newGig.userID).push(this.newGig);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:27:00