arrays - 将对象推送到数组反应本机
问题描述
我需要获取在 firestore 中具有 serviceClientID 字段的特定用户。
那些这样做的,我将其插入数组并将其放入我的状态聊天(setChat)中。
但问题是只有一个用户进入我的状态,我有两个用户使用这个字段。
为什么只有1个进入而不是2个?
下面的代码:
firebase.auth().onAuthStateChanged(async ({ uid }) => {
const servicesCollection = await firestore()
.collection('Providers')
.doc(uid)
.collection('ServiceHistory')
.get();
servicesCollection.docs.forEach(async item => {
if (item.exists && item.data().serviceClientID) {
const clientsCollection = await firestore()
.collection('Clients')
.doc(item.data().serviceClientID)
.get();
// if (item.data().serviceClientID === clientsCollection.id) {
const values = {
id: clientsCollection.id,
name: clientsCollection.data().name.last,
uid,
};
const arr = [];
arr.push(values);
// }
console.log('arrayay', arr);
setChats(arr);
}
});
});
解决方案
导致每个循环都清空一个数组。您必须将 {arr} 从函数中取出。然后你需要把数据推到里面。
const firebaseFunc = () => {
let arr = [];
firebase.auth().onAuthStateChanged(async ({ uid }) => {
const servicesCollection = await firestore()
.collection('Providers')
.doc(uid)
.collection('ServiceHistory')
.get();
servicesCollection.docs.forEach(async item => {
if (item.exists && item.data().serviceClientID) {
const clientsCollection = await firestore()
.collection('Clients')
.doc(item.data().serviceClientID)
.get();
arr.push({
id: clientsCollection.id,
name: clientsCollection.data().name.last,
uid,
});
});
});
setChats(arr);
console.log('arrayay', arr);
}
推荐阅读
- javascript - 如何删除数组的空值,如果值不为空,则只显示数组并将其显示给用户
- javascript - JS 和 Vue.js 中的动态导入
- javascript - [ASPX][JavaScript][DevExpress] 回调后无限 location.reload() 循环
- swift - 从 API 检测响应的数据类型
- azure - 使用 azure AD B2C 进行 blazor web api 身份验证
- java - 为什么getVoiceInteractor()返回null?
- reactjs - Redux 工具包:从 extraReducers 侦听器调度操作?
- exception - 从已在 DeadlineHandler 中使用序列的 EventStoreException 中恢复
- python - 旧数据到新结构
- lua - LUA - 创建元表,每个子表再次成为元表