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
相关产品推荐
相关产品推荐

