Firebase React Native获取数据

时间:2018-09-08 17:48:14

标签: firebase react-native

我正在尝试使用feed在本机上创建应用程序。在主屏幕上,我获取数据:

class Guess {
    public static void main (String[] args) throws java.io.IOException {
        char answer = 'K', ignore, ch = 'a';
        int i=0;

        while (ch != 'K') {
            System.out.println("I am Thinking of a letter between A and Z, can you guess it?");
            ch = (char) System.in.read();
            if (ch !='K') 
                System.out.println("Wrong ! please try again");
            i++;
        }
        System.out.println("Correct!, you guessed after "+i+" attempts");
    }

}

例如,当我想对帖子发表评论时,我首先使用不同的查询将数据推送到firebase中,例如:

fetchData() {
firebase.database().ref(`/posts/${group}`).on('value', async snapshot => {...}
}

但是我意识到我的第一个函数fetchData被调用了3次。 然后将查询分组为:

export const likeComment = (...) => {   
firebase.database().ref(`/posts/${group}/${post}`).update
({
   updatedAt: firebase.database.ServerValue.TIMESTAMP 
});
firebase.database().ref(`/posts/${group}/${post}/lastComments`).set(...);

然后,fetchData被调用了两次。

我想知道这是否是最好的方法,为什么我的函数fetchData仍然被调用两次。 谢谢您的帮助

1 个答案:

答案 0 :(得分:0)

很难从有限的代码中看出来,但我的猜测是fetchData实际上并没有被多次调用,而是在您更新Firebase数据库时触发snapshot

代码中您说.on('value', async snapshot =>的那部分是您要设置一个侦听器,以便在值更改时向您发送更新。

所以我的猜测是您的三个调用是:

  1. 您第一次真正调用fetchData并设置 听众
  2. 您的.on( snapshot监听器在您打电话时触发 update
  3. 您的.on( snapshot监听器在您再次触发时 致电set

基于推送的数据库工作流程是Firebase的主要优势之一。如果您只想一次获取数据而不希望实时更新,则可以调用.once(而不是.on(

https://firebase.google.com/docs/database/web/read-and-write