【发布时间】:2020-10-13 16:24:21
【问题描述】:
我目前正在尝试让 React-Big-Calendar 实时填充新添加的事件。我正在使用下面的代码,它完成了这项工作。事件将在创建/修改/删除后立即添加到日历中。但是,即使我没有从日历中添加或删除事件,它也会执行读取。在离开日历运行的 5 分钟内,我将超过我每天从 Firestore 读取 50k 的限制。 我是否使用了正确的方法?我的目标是在添加/修改/删除新事件时更新日历而不刷新。 有没有办法只在发生更改/更新时更新日历? 当我console.log(snapshot.docChanges()) 时,它返回数据并且所有类型都是added,无论它们是否是旧数据,因为它们最近没有添加。 这正常吗?
另外,我不太确定如何以及何时使用unsubscribe() 函数。 我应该什么时候调用它?如果我错了,请纠正我,但现在,通过在最后返回 unsubscribe(),它的行为应该类似于 componentWillUnmount。
//events are used in calendar
const [events, setEvents] = useState([] as CalendarEvent[]);
//onSnapshot to check for real-time updates
useEffect(() => {
const unsubscribe = firebase
.firestore()
.collectionGroup("bookings")
.where("orgId", "==", props.orgId ? props.orgId : null)
.onSnapshot((snapshot) => {
const bookedEvents: any = [];
snapshot.forEach((doc) => bookedEvents.push({ ...doc.doc.data() }));
//creates an eventlist so the calendar can call individual events
const eventList = bookedEvents.map((event: any) => {
return {
title: event.title,
start: new Date(
moment(event.time.startTime * 1000).format("YYYY-MM-DD HH:mm:ss")
),
end: new Date(
moment(event.time.endTime * 1000).format("YYYY-MM-DD HH:mm:ss")
),
eventId: event.eventId,
name: event.participants.name,
email: event.participants.email,
phoneNumber: event.phoneNumber,
itemQuantity: event.itemQuantity,
memberBookingType: event.memberBookingType,
};
});
//sets the eventlist as events for calendar
setEvents(eventList as CalendarEvent[]);
});
//componentWillUnmount unsubscribe();
return () => {
unsubscribe();
};
});
【问题讨论】:
标签: reactjs firebase google-cloud-firestore react-big-calendar