【问题标题】:Firebase React Native fetch dataFirebase React Native 获取数据
【发布时间】:2018-09-08 17:48:13
【问题描述】:

我正在尝试使用提要在 react-native 上做一个应用程序。在我的主屏幕上,我去获取数据:

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

例如,当我想点赞该帖子的评论时,我首先使用不同的查询将数据推送到 Firebase,例如:

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

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

let updates = {}
updates[`/posts/${group}/${post}/lastComments`] = {...};
updates[`/posts/${group}/${post}`] = { ... };
firebase.database().ref().update(updates);

然后,fetchData 仍然被调用了 2 次。

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

【问题讨论】:

    标签: firebase react-native


    【解决方案1】:

    从有限的代码中很难判断,但我的猜测是 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

    【讨论】:

    • 您好,非常感谢您的回答。确实是快照被调用了三遍,抱歉。我希望它刷新所以 .on( 是相关的。当我使用一次设置时,快照被调用一次,但是当我使用一次更新时,它被调用两次。这正常吗?
    • 我会查看返回的快照的内容。两次调用更新时它们是否相同?如果没有,您可能在不知不觉中在某处做更多的工作。
    • 感谢您的帮助,问题来自 firebase.database.ServerValue.TIMESTAMP,它返回两个值。
    猜你喜欢
    • 2021-04-06
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    相关资源
    最近更新 更多