Прежде всего: я довольно новичок в кодировании, особенно react-native
и firebase
, поэтому мне есть чему поучиться.
Я использую react-native
, firebase
и redux
для создания приложения.Таким образом, в моем приложении можно создавать группы с не фиксированным количеством участников и дополнительной информацией.Структура firebase
выглядит следующим образом:
{
"groups": {
[groupID]: {
"members": {
[userID]: true,
[userID]: true,
...
},
[some more information]
},
[more groups...]
},
"users": {
[userID]: {
"displayName": "John",
[some more information]
}
}
}
Поэтому я хочу получить последние 20 групп с отображаемыми именами ее членов и поместить их в массив, чтобы я мог использовать map
-функция react-native
.Это текущий код действия.
export const getGroups = (uid) => async dispatch => {
dispatch({ type: GET_GROUPS_INFO });
const groupData = [];
firebase.database().ref('users/' + uid + '/groups')
.orderByValue().limitToLast(20)
.once('value', snapshot => {
snapshot.forEach(childSnapshot => {
const key = Object.keys(childSnapshot.val())[0];
firebase.database().ref('groups/' + key)
.once('value').then(snap => {
const members = [];
for (const member in snap.val().members) {
if (member !== uid) {
firebase.database().ref('users/' + member)
.once('value', childSnap => {
members.push(childSnap.val().displayName);
dispatch(getGroupMembers());
})
.catch((err) => console.log(err));
}
}
groupData.push({
[some group information]
});
dispatch({
type: GET_GROUPS_INFO_SUCCESS,
groupData
});
})
.catch((err) => console.log(err));
});
});
};
С этим кодом у меня возникли две проблемы:
Код выглядит очень некрасиво, и его трудно прочитать,Как я могу сделать его более читабельным?
Я хочу добавить имена членов в массив groupData
, но я не знаю, как это сделать.Число членов не фиксировано, поэтому мне нужно вызвать функцию forEach
, чтобы вызвать функцию firebase, чтобы получить имена.Однако я не могу получить доступ к имени напрямую, поэтому мне нужно вызвать функцию getGroupMembers()
, чтобы передать ее reducer
для ее сохранения.
Я бытак благодарен, что кто-то может мне помочь!
Большое вам спасибо!