【发布时间】:2021-12-08 17:00:44
【问题描述】:
我无法让查询正常工作,这是我正在使用的钩子
export const useCollection = (collection, _query1, _orderBy ) => {
const query1 = useRef(_query1).current;
const orderBy = useRef(_orderBy).current;
useEffect(() => {
setIsPending(true);
let ref = projectFirestore.collection(collection)
if (query1) {
ref = ref.where(query1)
}
if (orderBy) {
ref = ref.orderBy(orderBy);
}
const unsubscribe = ref.onSnapshot(
(snapshot) => {
let results = [];
snapshot.docs.forEach((doc) => {
results.push({ ...doc.data(), id: doc.id });
});
// update state
setDocuments(results);
setError(null);
setIsPending(false);
},
(error) => {
console.log(error);
setIsPending(false);
setError("could not fetch the data");
}
);
// unsubscribe on unmount
return () => unsubscribe();
}, [collection, query1, orderBy ]);
return { documents, error, isPending };
};
我在这个组件中使用了这个钩子
export default function ViewRxFigures() {
const start = new Date('2021-11-01')
const { documents, error, isPending } = useCollection(
"rxFigures",
`'"dateForFigures", "<=" , "${start}"'`,
"dateForFigures"
);
得到一个
FirebaseError:使用无效数据调用函数 Query.where()。 不支持的字段值:未定义
它肯定与将查询的“where”部分传递到钩子中有关。当我使用这个将查询硬编码到钩子中时
const start = new Date("2021-11-01")
const ref = projectFirestore.collection(collection).where('dateForFigures', '<', start).orderBy('dateForFigures')
查询工作正常并按预期返回数据。我花了很长时间尝试来自 SO 和互联网的不同解决方案,但不知道我应该如何通过日期。
firebase 中的“dateForFigures”存储为时间戳。
非常感谢您指出我哪里出错了,因为我没有找到对 SO 或其他地方有帮助的答案
【问题讨论】:
标签: javascript reactjs firebase google-cloud-firestore