仅供参考;我已经检查了所有先前询问的问题,但没有一个与我的问题直接相关。我的文档集中在一个文档中,我想听听文档的更改。我首先使用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();
}, []);
}
我们非常感谢您的帮助。
答案 0 :(得分:2)
在整个集合上使用onSnapshot会更容易(CollectionReference是一个查找所有文档的查询)。您收到的快照将包含有关自上次调用侦听器以来发生更改(添加,更改或删除)的每个文档的信息。
firestore().collection('Networks').onSnapshot(querySnapshot => {
// handle changes to documents in the collection here
})