【发布时间】:2018-07-17 23:51:07
【问题描述】:
我有一个从 Firebase 接收数据的应用:
const projectsRef = fire.database().ref('projects').orderByKey().limitToLast(limit);
projectsRef.on('child_added', (snapshot) => {
const project = { ...snapshot.val(), id: snapshot.key };
console.log(project);
this.setState(prevState => ({
...prevState,
projects: [...prevState.projects, project],
}));
});
我有一百条记录,上面的监听器被调用了一百次,并且通过调用组件的 render() 方法一百次重新渲染了 ProjectsTable 组件。这一切都很好,很漂亮,但我实际上并没有看到屏幕上的 ProjectsTable 中显示的数据,直到所有这些都完成,然后又延迟了大约两秒钟。
为什么每次 render() 调用更新数据的组件后屏幕没有被重绘,我该如何解决这个问题?
【问题讨论】:
-
我不确定 Firebase 是如何工作的,但是否所有数据都在一个请求中加载,并且
child_added与查询中的每个项目一个接一个地同步调用? 2 秒的渲染可能只是因为您的每个项目都难以渲染。 -
但是我正在记录对 render() 的调用,并且在上面的侦听器接收到每条记录后,我看到了一个渲染调用。每次使用一条记录调用侦听器。
-
是的,我知道监听器一次调用一条记录,但我不确定底层逻辑是否是异步的。我误解了你的问题。如果在每个新项目调用
setState之前设置的超时时间越来越长,它是否按预期工作? IE。project1为 100 毫秒,project2为 200 毫秒,等等。 -
也许吧,但我只是在github.com/firebase/firebase-js-sdk 使用firebase sdk,所以我不知道如何控制它
标签: reactjs firebase firebase-realtime-database