我正在使用react native和Geofire创建一个应用程序,它将获取最近的位置并显示在FlatList中。我的代码基于this stackoverflow answer,因此我不确定为什么无法显示数据。
我的数据库结构:数据节点包含GeoFire设置的data
和location
。显然,它们具有相同的密钥。
我尝试console.log
来查看代码中发生了什么。它显示了在3个数组中提取3次的数据。
这是我的代码firebase代码:(为了查看结果,我尝试了不同的radius
并获取了预期的结果,因此它可以正常工作,我还尝试使用once
而不是{{ 1}},但没有运气
on
我的问题是firebase和geoFire运行了3次,因此无法将所有数据汇总在一起。它将仅显示“最后” setState数据到清单。 如何解决此问题? 非常感谢!
答案 0 :(得分:0)
由于您总是在行dataList
中将const dataList=[];
创建为一个空数组,因此组件每次获取新数据时都会忘记其旧状态。相反,您可以在添加新项目之前将当前data
数组复制到dataList
中:
const dataList = [...data];
请注意,useEffect
钩子的第二个参数当前为空数组([]
)。为了使您的查询在coordinates
发生更改时保持最新,您应该在数组中包含coordinates
:
useEffect(() => {
// ...
},[coordinates]);