[英]How to get id of an object from firebase
在设置 object 之后,我正在尝试获取 object 的 ID。 但我收到类型错误。 TypeError:无法读取未定义的属性(读取“val”)。 我应该如何使用 firebase 9 做到这一点?
这是我想要工作的代码:
set(push(ref(db, "expenses")), expense)
.then((snapshot) => {
console.log(snapshot.val());
dispatch(
addExpense({
id: snapshot.key,
...expense,
})
);
})
.catch((e) => {
console.log("This failed.", e);
});
提前致谢。
set(ref, value)的文档显示定义为:
function set(ref: DatabaseReference, value: unknown): Promise<void>
它返回一个Promise<void>
,所以没有snapshot
被传递给你 then 。
如果 promise 解决(因此您的then
回调被调用) expense
已按原样写入服务器上的数据库。
如果您想获取push
调用的密钥,您可以在set
调用之外捕获它:
const newRef = push(ref(db, "expenses"));
set(newRef, expense)
.then(() => {
dispatch(
addExpense({
id: newRef.key,
...expense,
})
);
})
.catch((e) => {
console.log("This failed.", e);
});
调用push
是纯客户端操作,因此不需要await
或then
。
请注意,现在您只在将费用写入服务器后在本地显示费用。 如果这是您的用例的要求,那么。 但是当使用 Firebase 时,很常见的是:
expenses
上使用永久的onValue
侦听器以在 UI 中显示最新的费用。then()
监听器: set(push(ref(db, "expenses")), expense);
onValue
侦听器,假设写入将成功。onValue
再次使用更正的数据调用 onValue,因此您的 UI 可以更新 state。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.