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
相关产品推荐
相关产品推荐

