Firebase - Как получить данные из другого места? - PullRequest
0 голосов
/ 14 января 2019

У меня есть такая структура данных для моего веб-приложения 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 в первую очередь. Большая ошибка !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...