const getUserData = async () => {
await getDocs(collection(db, 'accounts'))
.then((response) => {
setUserData(response.docs.map((data) => {
if (Number(data.data().code) === Number(token)) {
return { ...data.data(), id: data.id };
} else {
return {};
}
}));
});
};
下面是一个数据库参考截图:
我希望如果令牌/代码彼此匹配,用户的数据会被获取,但实际上它根本没有获取任何东西。
UseEffect(() => {
getData()
setToken(localStorage.getItem('token'))
getUserData()
}, [])
1条答案
按热度按时间wmtdaxz31#
回复
您的
getDocs()
函数没有根据Firestore中的特定字段检索任何数据,可能有几个原因。原因一:您没有使用查询
getDocs()
函数本身将返回集合中的所有文档,而不考虑它们的字段。如果要根据特定字段筛选文档,则需要使用查询。例如,如果你只想获取code
字段与token
变量匹配的文档,你可以使用如下方法:这样,您就不需要在
map
函数中手动检查code
字段。原因二:您对字段使用了不正确的数据类型
Firestore支持不同的字段数据类型,如字符串,数字,布尔值,数组等如果对字段使用的数据类型与Firestore中存储的数据类型不同,则可能不会得到任何结果。例如,如果
code
字段在Firestore中存储为字符串,但您将其与代码中的数字进行比较,则不会获得任何匹配项。要解决这个问题,您需要确保数据类型是一致的。例如,您可以在查询中使用token
变量之前将其转换为字符串:原因三:您使用的字段名或路径不正确
Firestore允许您使用点表示法来访问文档中的嵌套字段。例如,如果您有一个名为
user
的字段的文档,其中包含一个名为name
的字段的对象,则可以使用user.name
访问该字段。但是,如果使用了不正确的字段名或路径,则将得不到任何结果。例如,如果使用user.name.first
而不是user.name
,则不会获得任何匹配项。要解决此问题,您需要确保字段名称或路径正确,并与Firestore中存储的内容匹配。例如:我希望这能帮助你解决你的问题。