【问题标题】:How to listen to changes in a firestore document when doc id is unknown当文档 ID 未知时如何监听 Firestore 文档中的更改
【发布时间】:2020-07-24 20:35:11
【问题描述】:

仅供参考;我检查了所有之前提出的问题,但没有一个与我的问题直接相关。我在一个集合中有文档,我正在尝试收听文档的更改。我首先使用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();

    }, []);
}

非常感谢任何帮助。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • with unsubscribe --------- `useEffect(() => { const unsubscribe = firestore().collection('Networks').onSnapshot((snap) => { // 在此处处理对集合中文档的更改 }); return unsubscribe; }, []); `
    猜你喜欢
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 2018-11-01
    • 1970-01-01
    • 2020-03-17
    • 2021-01-08
    • 2020-01-07
    相关资源
    最近更新 更多