简体   繁体   English

Reactjs:TypeError:无法读取未定义的属性“eventSlots”

[英]Reactjs: TypeError: Cannot read property 'eventSlots' of undefined

I am creating a calendar with events using reactjs, Now when the calendar shows the current month, when I click next its shows the April month if I click again next I get the following error.我正在使用 reactjs 创建一个带有事件的日历,现在当日历显示当前月份时,当我单击下一步时,如果我再次单击下一步,它会显示四月月份,我收到以下错误。

TypeError: Cannot read property 'eventSlots' of undefined.类型错误:无法读取未定义的属性“eventSlots”。

在此处输入图片说明

The error appears in a function where I try to get days with the event here its.错误出现在一个函数中,我尝试在此处获取事件的日期。

  getDaysWithEvents() {
        // Get all the days in this months calendar view
        // Sibling Months included
        const days = this.getCalendarDays();

        // Set Range Limits on calendar
        this.calendar.setStartDate(days[0]);
        this.calendar.setEndDate(days[days.length - 1]);

        // Iterate over each of the supplied events
        this.props.events.forEach((eventItem) => {

            const eventStart = this.getCalendarDayObject(eventItem.start);
            const eventEnd = this.getCalendarDayObject(eventItem.end);
            const eventMeta = this.getEventMeta(days, eventStart, eventEnd);

            if (eventMeta.isVisibleInView) {
                const eventLength = eventMeta.visibleEventLength;

                console.log("Days", days); 

                const eventSlotIndex = days[eventMeta.firstVisibleDayIndex].eventSlots.indexOf(false); // this line returns error
                //console.log("eventSotsindex", eventSlotIndex);
                let dayIndex = 0;

                // For each day in the event
                while (dayIndex < eventLength) {
                    // Clone the event object so we acn add day specfic data
                    const eventData = Object.assign({}, eventItem);

                    if (dayIndex === 0) {
                         // Flag first day of event
                        eventData.isFirstDay = true;
                    }

                    if (dayIndex === eventLength - 1) {
                        // Flag last day of event
                        eventData.isLastDay = true;
                    }

                    if (!eventData.isFirstDay || !eventData.isLastDay) {
                        // Flag between day of event
                        eventData.isBetweenDay = true;
                    }

                    // Apply Event Data to the correct slot for that day
                   //console.log(eventMeta, dayIndex, days);

                    if (days[eventMeta.firstVisibleDayIndex + dayIndex]) {
                       if (days[eventMeta.firstVisibleDayIndex + dayIndex].eventSlots) {
                            days[eventMeta.firstVisibleDayIndex + dayIndex].eventSlots[eventSlotIndex] = eventData;

                       }
                    }

                    // Move to next day of event
                    dayIndex++;
                }
            }
        });

        return days;
    }

The line of code causing the problem : const eventSlotIndex = days[eventMeta.firstVisibleDayIndex].eventSlots.indexOf(false);导致问题的代码行: const eventSlotIndex = days[eventMeta.firstVisibleDayIndex].eventSlots.indexOf(false);

NOTE: If someone wishes here is a repository with full code calenar demo , clone , npm install and npm start注意:如果有人希望这里有一个包含完整代码calenar democlonenpm installnpm start的存储库

What do I need to do to solve the problem?我需要做什么来解决问题? any help or contributions will be appreciated.任何帮助或贡献将不胜感激。

The eventMeta.firstVisibleDayIndex goes out of bounds (ie, eventMeta.firstVisibleDayIndex is greater than or equal to days.length ). eventMeta.firstVisibleDayIndex越界(即eventMeta.firstVisibleDayIndex大于或等于days.length )。

A workaround would be to reset the first day index to 0 as follows:一种解决方法是将第一天索引重置为 0,如下所示:

const firstDayIndex = eventMeta.firstVisibleDayIndex < days.length ? eventMeta.firstVisibleDayIndex : 0;

const eventSlotIndex = days[firstDayIndex].eventSlots.indexOf(false);

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

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