开发者问题收集

无法读取未定义的属性(读取“DateTime”)即使我检查 React.js 中是否有数据

2021-12-22
3751

我几周前才开始学习 React。所以,如果我问了一个很笼统的问题,我很抱歉。但是,如果你能帮助我,我将不胜感激!

  • 问题 :无法读取未定义的属性(读取“DateTime”)

  • 我尝试解决它的方法 :首先,我尝试一般性地解决它。我的意思是我添加条件来推进我的代码并重新渲染。此外,我检查数据是否存在。

  • 代码

  const changeWeekendDateColor = () => {
    let eventArray = [];
    let weekendArray = [];
    if (weekendData && weekendData.event && weekendData.schedule) {
      let status = false;
      const dataEventLength = weekendData.event.length;
      const dataWeekendLength = weekendData.schedule.length;

      for (let i = 0; i <= dataEventLength; i++) {
        eventArray.push(weekendData.event[i].DateTime.split("T")[0]);
      }

      for (let i = 0; i <= dataWeekendLength; i++) {
        weekendArray.push(weekendData.schedule[i].split(" ")[0]);
      }
    }

    for (let i = 0; i <= eventArray.length; i++) {
      if (weekendArray.includes(eventArray[i])) return (status = false);
    }

    return status;
  };
  console.log(changeWeekendDateColor(weekendData));

WeekendData 就是这个

在此处输入图片描述

  • 我的期望 :我添加了 if 语句
if (weekendData && weekendData.event && weekendData.schedule)

所以,我认为这应该是可行的,因为如果没有数据,它就不应该执行下一行。我不确定为什么我的代码无法接近 weekendData.event.DateTime...

在此处输入图片描述

1个回答

for 循环无法读取未定义的属性。 dataWeekendLength 有 7 个长度,但 weekendData.event 在数组中只有 1 个长度。

请参阅 WeekendData.schedule.length

...
schedule: Array(7)

这是代码中的 for 循环,

      for (let i = 0; i <= dataEventLength; i++) {
        eventArray.push(weekendData.event[i].DateTime.split("T")[0]);
      }

for 循环 7 次,得到 dataEventLength

它是 weekendData.event

...
event: Array(1)

如果 for 循环继续 i = 1 ,那么它将是 weekendData.event[1]

但是没有 weekendData.event[1] ,只有 weekendData.event[0] .

该代码可以工作,但是数组只有一个。

jacobkim
2021-12-22