0

注意:我对其他解决方案持开放态度。此代码的目标是通过使用日期访问它来轻松获取特定日期的所有事件。这可能不是最好的解决方案。

我想将“事件”对象推送到正确的数组中,但是我无法让它工作。

下面是我要“添加”到的对象。

this.state = {
    events: {
        Wed Apr 14 2021 00:00:00 GMT+0200 (Central European Summer Time): [],
        Tue Apr 15 2021 00:00:00 GMT+0200 (Central European Summer Time): [],
        and so on....
    }
}

“日期键”的时间始终相同(格林威治标准时间 00:00:00+0200(中欧夏令时间)),但不是日、月或年。

这是我试图让它发挥作用的尝试:

addEvent(event) {
        const events = this.state.events;
        const date = event.date;
        let list = [];

        if (typeof events[date] !== 'undefined') {
            list = events[date];
        }

        list.push(event);
        //console.log(events[date]);

        this.setState({
            events: {
                [date]: list
            }
        });
    }

(传入的事件参数是一个带有“new Date()”属性作为 event.date 的对象。)

4

2 回答 2

2

你可以做这样的事情。根据您发表的最新评论。

addEvent(event) {
        const { events } = this.state;
        const date = event.date.getTime();
        let list = [];

        if (typeof events[date] !== 'undefined') {
            list = events[date];
        }

        list.push(event);
        //console.log(events[date]);

        this.setState((state) => ({
            events: {
                ...state.events,
                [date]: list,
            },
        }));
    }

event.date如果您不是日期类型,请记住创建一个日期。

addEvent(event) {
        const { events } = this.state;
        const date = new Date(event.date)
于 2021-04-13T08:03:39.650 回答
1

以将数组存储在事件状态谎言中的方式维护数组数天

let days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];

现在您可以使用date.getUTCDay()ordate.getDay()函数,具体取决于日期是否在中UTC提取日期,然后在您的状态下更新它

addEvent(event) {
    const events = this.state.events;
    const dayOfWeek = days[event.date.getUTCDay()];
    let list = [];

    if (typeof events[dayOfWeek ] !== 'undefined') {
        list = events[dayOfWeek];
    }

    list.push(event);
    this.setState({
        events: {
            ...this.state.events,
            [dayOfWeek]: list
        }
    });
}
于 2021-04-13T07:37:50.297 回答