文档 ID 未知时如何监听 firestore 文档中的更改
How to listen to changes in a firestore document when doc id is unknown
仅供参考;我已经检查了之前提出的所有问题,其中 none 与我的问题直接相关。我在一个集合中有文档,我正在尝试收听文档的更改。我首先使用 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();
}, []);
}
非常感谢任何帮助。
对整个集合使用 onSnapshot 会容易得多(CollectionReference 是查找所有文档的查询)。您收到的快照将包含自上次调用侦听器以来更改(添加、更改或删除)的每个文档的信息。
firestore().collection('Networks').onSnapshot(querySnapshot => {
// handle changes to documents in the collection here
})
仅供参考;我已经检查了之前提出的所有问题,其中 none 与我的问题直接相关。我在一个集合中有文档,我正在尝试收听文档的更改。我首先使用 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();
}, []);
}
非常感谢任何帮助。
对整个集合使用 onSnapshot 会容易得多(CollectionReference 是查找所有文档的查询)。您收到的快照将包含自上次调用侦听器以来更改(添加、更改或删除)的每个文档的信息。
firestore().collection('Networks').onSnapshot(querySnapshot => {
// handle changes to documents in the collection here
})