简体   繁体   English

使用 react-big-calendar 将数据保存在 localStorage

[英]saving data in localStorage with react-big-calendar

I'm implementing react-big-calendar in my toy project, and I want the events in the calendar to stay even after refreshing the page.我正在我的玩具项目中实现 react-big-calendar,我希望日历中的事件即使在刷新页面后也能保留。 I was planning to save the events in localStorage and then retrieve them back.我打算将事件保存在 localStorage 中,然后将它们取回。 However, even after saving the events in localStorage, all the events are gone after page is rendered.但是,即使将事件保存在 localStorage 中,页面渲染后所有事件都消失了。

export default function Calendar() {
  const localizer = momentLocalizer(moment);

  const [events, setEvents] = useState<any[]>([]);

  const handleSelectSlot = useCallback(
    ({ start, end }) => {
      const title = window.prompt("create an event");
      if (title) {
        setEvents((prev) => [...prev, { start, end, title }]);
      }
    },
    [setEvents]
  );

  useEffect(() => {
    localStorage.setItem("events", JSON.stringify(events));
  }, [events]);

  useEffect(() => {
    if (events.length) {
      localStorage.getItem("events" || "[]");
    }
  }, []);

  const onClickRemoveEvent = (event: any) => {
    const newEvents = events.filter((el) => el.start !== event.start);
    setEvents([...newEvents, events]);
  };

  const { defaultDate, scrollToTime } = useMemo(
    () => ({
      defaultDate: new Date(),
      scrollToTime: new Date(2000, 1, 1, 6),
    }),
    []
  );

  const eventStyleGetter = (event: any) => {
    console.log("eventGetter:", event.hexColor);
    // const backgroundColor = "#" + event.hexColor;
    const style = {
      backgroundColor: "beige",
      borderRadius: "0px",
      opacity: 0.8,
      color: "black",
      border: "0px",
      display: "block",
    };
    return {
      style,
    };
  };

  return (
    <>
      <S.Wrapper>
        <S.ScheduleCalendar
          localizer={localizer}
          events={events}
          selectable={true}
          views={["month", "week", "day"]}
          defaultDate={defaultDate}
          onSelectSlot={handleSelectSlot}
          onSelectEvent={onClickRemoveEvent}
          scrollToTime={scrollToTime}
          eventPropGetter={eventStyleGetter}
        />
      </S.Wrapper>
    </>
  );
}

Is there a way I could save the events data?有没有办法保存事件数据?

You can store and retrieve events data in localStorage , but...您可以在localStorage中存储和检索events数据,但是...

You have to remember that localStorage does not preserve data types, meaning you must manually convert all event start and end dates back to JS Date objects prior to putting them in your events prop.您必须记住localStorage不保留数据类型,这意味着您必须手动将所有事件startend日期转换回 JS Date对象,然后再将它们放入events道具中。 See Big Calendar's documentation on Understanding Dates请参阅大日历关于了解日期的文档

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM