首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在另一个VueUse useFirestore引用useFirestore?

如何在另一个VueUse useFirestore引用useFirestore?
EN

Stack Overflow用户
提问于 2022-09-13 11:06:52
回答 2查看 99关注 0票数 0

我正在尝试使用VueUse useFirestore()包装器。

它返回一个与Firestore文档同步的ref。

目前,我可以使用它来获取和显示users文档。

但是现在我需要通过引用来自websites文档的currentWebsiteId字段来获取和显示users文档。

当我尝试这样做的时候,什么都没有显示出来。控制台中也没有错误。

这就是我的代码的样子:

代码语言:javascript
运行
复制
<template>
  <div>{{ user }}</div> 
  <div>{{ website }}</div>
</template>

<script setup lang="ts">
import { useAuth } from '@vueuse/firebase/useAuth';
import { useFirestore } from '@vueuse/firebase/useFirestore';
import { doc } from 'firebase/firestore';
import { auth, db } from 'src/config/firebase';
import { User, Website } from 'src/types';

const { user: authUser } = useAuth(auth);

const userDocRef = doc(db, `users/${authUser.value?.uid}`);
const user = useFirestore<User>(userDocRef);

const websiteDocRef = doc(db, `websites/${user.value?.currentWebsiteId}`);
const website = useFirestore<Website>(websiteDocRef);
</script>

由于useFirestore()是异步的,所以它将在返回实际的undefined文档后不久返回undefined

我认为这可能是问题所在,所以我试着使用watch来解决这个问题:

代码语言:javascript
运行
复制
let website = ref();
watch(user, () => {
  const websiteDocRef = doc(db, `websites/${user.value?.currentWebsiteId}`);
  website = useFirestore<Website>(websiteDocRef);
});

但这也有同样的问题。什么都不显示,控制台中也没有错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-18 23:12:25

正如@EstusFlask所评论的那样,博士们展示认为它需要包装在一个computed引用中。

这是因为当computed的参考值发生变化时,会重新计算它。

因此,websiteDocRef变成了这样:

代码语言:javascript
运行
复制
const websiteDocRef = computed(() =>
  doc(db, `websites/${user.value?.currentWebsiteId}`)
);

以下是完整的代码:

代码语言:javascript
运行
复制
<template>
  <div>{{ user }}</div> 
  <div>{{ website }}</div>
</template>

<script setup lang="ts">
import { useAuth } from '@vueuse/firebase/useAuth';
import { useFirestore } from '@vueuse/firebase/useFirestore';
import { doc } from 'firebase/firestore';
import { auth, db } from 'src/config/firebase';
import { User, Website } from 'src/types';

const { user: authUser } = useAuth(auth);

const userDocRef = doc(db, `users/${authUser.value?.uid}`);
const user = useFirestore<User>(userDocRef);

const websiteDocRef = computed(() =>
  doc(db, `websites/${user.value?.currentWebsiteId}`)
);
const website = useFirestore<Website>(websiteDocRef);
</script>
票数 0
EN

Stack Overflow用户

发布于 2022-09-16 07:12:53

正如@Estus评论的那样,website = useFirestore --这是一个错误,永远不要重新分配参考文献,只有它们的价值。可组合性应该直接在安装程序中使用,通过多次调用它,您很可能会滥用它。用计算包包装依赖于doc()currentWebsiteId。它已经在docs,vueuse.org/firebase/usefirestore/#中得到了解释。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73701878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档