У меня есть такая структура данных для моего веб-приложения kanban:
boards
-boardid
author: 'abc'
container:
-containerid1 (//generated by push)
title: 'Column1'
type: 'common'
-containerid2
title: 'Column2'
type: 'common'
-containerid3:
title: 'Column3'
type: 'individual'
userId:'....'
cards:
- containerid1
- cardid1: //generated by push
title: 'card1'
- cardid2:
title: 'card2'
- containerid3:
- cardid3:
title: 'card3'
По сути, на плате я храню только общие данные каждого контейнера, такие как заголовок, тип и т. Д. В конце я хочу получить массив контейнеров, и каждый контейнер имеет массив карт:
[{id:'containerid1',
title: 'Column1',
cards: [{id:'cardid1', title:'card1'}, {id:'cardid2', title:'card2'}]}
{...},
{...}]
Я использую реагирующий редукс для извлечения данных моего контейнера, но я не могу получить данные карт за один раз.
const fetchContainers = (boardId) => dispatch => {
return FirebaseRef.child(`boards/${boardId}/containers`).on('value', (snapshot) => {
const containers = []
snapshot.forEach((childSnapshot) => {
const containerId = childSnapshot.key
const cards = []
FirebaseRef.child(`cards/${containerId}`).on('value', snap => {
if (snap.exists()) {
snap.forEach(snapCard => {
cards.push({
id: snapCard.key,
...snapCard.val()
})
})
}
containers.push({
id: containerId,
...childSnapshot.val(),
cards
})
dispatch({
type: FETCH_CONTAINERS,
containers
})
})
})
})
}
то, что было возвращено, является пустым массивом контейнеров.
Но когда я ставлю
containers.push({
id: containerId,
...childSnapshot.val(),
cards
})
dispatch({
type: FETCH_CONTAINERS,
containers
})
за пределами FirebaseRef.child ('карта ...
Мне удалось получить общие данные контейнеров, но с пустым массивом карт:
[{id:'containerid1',
title: 'Column1',
cards: [] // empty here}
{id:'containerid2' ....]
Обновление:
Я решил свою проблему. Я не смог получить доступ к местоположению «карт» пути, поэтому он всегда возвращает ноль. Я забыл установить правила в FireBase, так как я не был знаком с FireBase в первую очередь. Большая ошибка !!!