Как прослушать изменения в документе пожарного магазина, когда идентификатор do c неизвестен - PullRequest
0 голосов
/ 12 апреля 2020

Просто к вашему сведению; Я проверил все ранее заданные вопросы, и ни один из них не имеет прямого отношения к моей проблеме. У меня есть документы в коллекции, и я пытаюсь выслушать изменения в документах. Сначала я использую get() для извлечения всех документов в коллекции, а затем перебираю их все для прослушивания изменений. Это может быть неправильный способ сделать это, но я не могу найти ничего другого в документах или в Интернете.

Моя проблема в том, что, поскольку я сначала использую get(), слушатель onSnapshot не получает вызывается, если я не вручную refre sh. Я пытаюсь заставить его автоматически показывать изменения по мере их появления. Например, если я добавлю документ в коллекцию, я ожидаю его запуска.

Вот мой код:

const db = firestore().collection('Networks');

const NetworksListScreen = ({ navigation }) => {

    const [state, setState] = useState({ networks: [] });

    const { networks } = state;

    const getNetworks = async () => {
        try {
            await db.get().then((querySnapshot) => {
                let networks = [];
                querySnapshot.forEach(doc => {
                    db.doc(doc.id).onSnapshot(newDoc => {
                        console.log(newDoc.id, '=====>', newDoc.data());
                        networks.push(doc.data());
                    });
                });
                setState({
                    networks: networks
                });
            });
        } catch (err) {
            console.log(err)
        }
    };

    useEffect(() => {
        getNetworks();

    }, []);
}

Любая помощь очень ценится.

1 Ответ

2 голосов
/ 12 апреля 2020

Вам будет гораздо проще использовать onSnapshot для всей коллекции (CollectionReference - это запрос, который находит все документы). Получаемый снимок будет содержать информацию о каждом документе, который был изменен (добавлен, изменен или удален) с момента последнего вызова слушателя.

firestore().collection('Networks').onSnapshot(querySnapshot => {
    // handle changes to documents in the collection here
})
...