You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native中Firestore筛选查询返回重复数据问题排查

React Native + Firestore 筛选条件变更后数据未更新问题

我有一个基于React Native + Firebase的项目,筛选页面会将筛选条件作为参数传递至首页。预期筛选条件变更时,能调用对应函数获取匹配的新数据,但修改筛选条件后,控制台返回的始终是相同的数据。

补充说明

  • 理论上console.log(error)应该提示创建复合索引,但实际未出现该提示,因此手动添加了Firestore标签
  • 手动构建带where参数的查询时,能获取到创建索引的链接,但仍不清楚当前数据未更新的原因

已确认检查项

  • 参数中的筛选条件已成功更新
  • 更新后的筛选条件已传入查询函数

代码片段

Home.jsx

useEffect(() => {
  if (filters) {
    console.log("FILTERS CHANGED:", filters); // 此处能看到filters已更新
    fetchFilteredData();
  }
}, [filters]);

const fetchFilteredData = useCallback(async () => {
  try {
    const data = await getFilteredData(filters, city);
    console.log(data.venues); // 筛选条件变更后,此处仍返回相同数据
  } catch (error) {
    console.log(error);
  }
}, [filters, city]);

firestore.js

export async function getFilteredData(filters, city_id) {
  console.log("FILTERS IN GET FILTERED DATA:", filters); // 此处也能看到filters已更新???
  let venues = [];
  let lastVenue;
  let query = firestore().collection("venues").where("city_id", "==", city_id);
  if (filters.districts.length > 0) {
    query.where("district_id", "in", filters.districts);
  }
  if (filters.category) {
    query.where("category_id", "==", filters.category);
  }
  if (filters.order) {
    query.orderBy(order, "desc");
  } else {
    query.orderBy("created_at", "desc");
  }
  await query
    .limit(20)
    .get()
    .then((snapshot) => {
      lastVenue = snapshot.docs[snapshot.docs.length - 1];
      snapshot.forEach((doc) => {
        venues.push({ id: doc.id, ...doc.data() });
      });
    });
  return { venues, lastVenue };
}

筛选条件示例对象

{"category": "22DrTJ7hnEiZ8igZk4zS", "districts": [], "order": null}

额外发现

已注意到orderBy应使用filters.order而非order,但修改后问题依然存在。

内容的提问来源于stack exchange,提问作者David Henry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 10:05:08