Как использовать FireStore слушателей в режиме реального времени с Redux? - PullRequest
0 голосов
/ 24 марта 2020

У меня есть проект реагировать на избыточность, я хочу использовать FireBase FireStore в режиме реального времени.

Сейчас у меня есть действие, которое выбирает исходные данные:

export const handleInitialData = () => async dispatch => {
  const lists = await firestore.collection('lists').get()

  if (lists) {
    const resolvedLists = lists.docs.map(list => list.data())
    return dispatch(receiveLists(resolvedLists))    
  }
}

Как вы могу видеть, что я использую .collection('lists').get(), и это работает.

Но я хочу использовать слушателя в реальном времени, используя .onSnapshot, например:

export const handleInitialData = () => async dispatch => {
  const lists = await firestore.collection('lists').onSnapshot(snapshop => {
   let changes = snapshop.docChanges()
  })
}

, но если я это сделаю, я получу ошибка: Unhandled Rejection (TypeError): Cannot read property 'map' of undefined

Понятия не имею, откуда отсюда go ... есть какие-нибудь советы по работе?

Я видел, есть ли эта библиотека https://github.com/prescottprue/react-redux-firebase

Но он использует recompose, который я ненавижу, плюс автор больше не рекомендует его.

Это может вызвать некоторую помощь.

1 Ответ

0 голосов
/ 24 марта 2020

Я получил его на работу, должен был сделать это вместо:

export const handleInitialData = () => async dispatch => {
  // const lists = await firestore.collection('lists').get()
  let docs
  const lists = await firestore.collection('lists').onSnapshot(snapshot => {
    docs = snapshot.docChanges().map(c =>c.doc.data())
    if (docs) {
      return dispatch(receiveLists(docs))    
    }
    return
  })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...