在文档ID未知的情况下如何收听Firestore文档中的更改

时间:2020-04-12 07:48:46

标签: reactjs firebase react-native google-cloud-firestore react-native-firebase

仅供参考;我已经检查了所有先前询问的问题,但没有一个与我的问题直接相关。我的文档集中在一个文档中,我想听听文档的更改。我首先使用get()来检索集合中的所有文档,然后循环浏览所有文档以听取更改。这可能是错误的方法,但是我在文档或在线中找不到其他任何内容。

我的问题是,因为我首先使用的是get(),所以除非手动刷新,否则不会调用onSnapshot侦听器。我正在尝试使其自动显示更改。例如,如果我将文档添加到集合中,则希望它运行。

这是我的代码:

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 个答案:

答案 0 :(得分:2)

在整个集合上使用onSnapshot会更容易(CollectionReference是一个查找所有文档的查询)。您收到的快照将包含有关自上次调用侦听器以来发生更改(添加,更改或删除)的每个文档的信息。

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