我成功地使用Vue 3 Computed ref返回了不同的Firebase doc
,这取决于currentAuditId
值是否为undefined
。
现在我想把这个功能提取到一个可重用的函数中,但是当我这样做的时候,计算引用就停止工作了。
这个Computed ref可以工作。console.log
首先打印undefined
,然后打印currentAuditId
:
const auditSource = computed(() => {
console.log(user.value?.currentAuditId); // Prints 'undefined' initially, and then later it updates and prints the correct currentAuditId string
if (user.value?.currentAuditId) {
return doc(collection(firestore, "audits"), user.value?.currentAuditId);
} else {
return doc(collection(firestore, "audits"));
}
});
const audit = useDocument<Audit>(auditSource);
但是当我试图将计算的ref精确地转换为可重用的函数时,计算的ref不再更新。console.log
打印undefined
,然后没有其他内容:
const computedDoc = (collectionPath: string, documentId?: string) => {
return computed(() => {
console.log(documentId); // Prints 'undefined', and does not update again after that!
if (documentId) {
return doc(collection(firestore, collectionPath), documentId);
} else {
return doc(collection(firestore, collectionPath));
}
});
};
const audit = useDocument<Audit>(
computedDoc("audits", user.value?.currentAuditId)
);
2条答案
按热度按时间vawmfj5a1#
computed在计算时设置依赖关系。提前访问
user.value?.currentAuditId
将阻止它工作,因为documentId
是非React值。为了匹配原始代码,它应该接受无功值作为输入,即ref:
两个可组合对象可以按如下方式组合:
b09cbbtk2#
尝试使用ref()或reactive而不是computed。我猜这是一个未定义documentId的时间问题。Computed在变量赋值之前被调用。我不会在函数中返回计算函数。我在Vue2中使用了很多computed,但现在在Vue3中我使用ref或reactive。希望这能有所帮助。