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

React集成Firebase(v10.4.0)删除待办项时触发db._checkNotDeleted错误

解决Firebase Realtime Database删除待办项时db._checkNotDeleted is not a function错误

问题原因

报错的核心是调用ref函数时参数使用错误:ref(todosRef, keyToRemove)中第一个参数传入了已有的数据库引用(todosRef),但Firebase v10的refAPI要求第一个参数必须是数据库实例对象(即getDatabase(app)返回的database),第二个参数是完整的路径字符串。

修正方案

将创建待办项引用的代码改为使用数据库实例拼接完整路径:

修改后的完整代码

const app = initializeApp(firebaseConfig);
const database = getDatabase(app);
const todosRef = ref(database, "todos");

export const removeTodo = async (todoIdToRemove) => {
  try {
    const todosQuery = query(todosRef, orderByChild("id"), equalTo(todoIdToRemove));
    const snapshot = await get(todosQuery);

    if (snapshot.exists()) {
      const childSnapshot = snapshot.val();
      const keyToRemove = Object.keys(childSnapshot)[0];
      // 用数据库实例 + 完整路径创建待办项引用
      const todoRefToRemove = ref(database, `todos/${keyToRemove}`); 

      await remove(todoRefToRemove);
      console.log(`Removed successfully`);
    }
  }
  catch (error) {
    console.error("Error removing todo:", error);
  }
}

额外说明

当前你的数据库结构是数组形式,Firebase Realtime Database会自动将数组转换为键为索引的对象(比如0、1),所以查询后拿到的keyToRemove是数组索引,修正后的代码可以正确定位到待办项。如果后续用push(todosRef, {...})添加待办项,Firebase会生成唯一随机键,代码依然适用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 11:31:00