【问题标题】:Cannot Read properties of undefined (reading: 'map')无法读取未定义的属性(读取:'map')
【发布时间】:2022-07-27 23:02:52
【问题描述】:

我一生都无法弄清楚为什么它不阅读地图,我有控制台记录了 item.title 等单独的片段,它们可以工作,但是这根本不起作用,一直给我一个错误,我注意到了还有一个对象是不确定的,天知道是什么原因。

感谢任何帮助 - 我是新人

 function Card(props) {
 const updatedData = props.data;
 console.log(updatedData);
  const newEntry = updatedData.map(function (item) {
    return (
      <div className="main-container" key={item.id}>
        <div className="main-image">
          <img src={item.imageUrl} alt="" />
        </div>
        <div className="main-info">
          <div className="location-container">
            <img className="placeholder-logo" src={placeholder} alt="" />
            <p className="location">{item.location}</p>
            <a href={item.googleMapsUrl}>View on Google Maps</a>
          </div>
          <h1>{item.title}</h1>
          <h4 className="dates">
            {item.startDate}-{item.endDate}
          </h4>
          <p className="description">{item.description}</p>
        </div>
      </div>
    );
  });
  console.log(newEntry);
}

【问题讨论】:

  • 可能与Weird behavior with objects & console.log有关。登录console.log(JSON.stringify(updatedData))会得到什么?
  • 此错误意味着“updatedData”在某个时间点未定义。我建议在尝试使用地图之前先发送if( !updatedData) { alert('No data'); return; } 以确保您确实有数据。
  • @Ivar 我得到一个对象数组。
  • @martin66 是的,它打印出预先编写的代码,然后有一个对象说未定义,我不知道如何找到它。
  • @Ivar,@martin66 你们都提出了确切的观点,我在 App 组件中调用了 而没有 prop 值,我在 组件中调用了 Value .我唯一要弄清楚的是如何从Entry -> App -> Card中移动数据。编辑 - 刚刚发现,当我控制台记录 newEntry 时,我会得到对象数组,如 {$$typeof: Symbol(react.elemet)} 等

标签: javascript reactjs


【解决方案1】:

我了解您的代码中的错误。

在这里,您正在映射一个数组并返回一个 div 数组,这很好,但 javascript 不会让 newEntry 自己成为一个数组。

所以你可以做的是

 function Card(props) {
     const updatedData = props.data;
     console.log(updatedData);
     const newEntry = []
     updatedData.map(function(item) {
     newEntry.push(
      `<div className="main-container" key=${item.id}>
        <div className="main-image">
          <img src=${item.imageUrl} alt="" />
        </div>
        <div className="main-info">
          <div className="location-container">
            <img className="placeholder-logo" src="placeholder" alt="" />
            <p className="location">${item.location}</p>
            <a href=${item.googleMapsUrl}>View on Google Maps</a>
          </div>
          <h1>${item.title}</h1>
          <h4 className="dates">
            ${item.startDate}-${item.endDate}
          </h4>
          <p className="description">${item.description}</p>
        </div>
      </div>`
    );
  });
  console.log(newEntry);
}

您可以创建一个新数组并将每个元素推入该数组。

您不能将 html 存储在 javascript 中,除非您将其用作字符串。

如果你在某个地方附加这个 div,你可以只附加这个字符串,它会起作用。

【讨论】:

猜你喜欢
  • 2022-07-11
  • 2023-01-19
  • 1970-01-01
  • 2023-01-03
  • 2017-08-15
  • 2018-12-23
  • 1970-01-01
  • 2023-03-11
  • 2022-01-15
相关资源
最近更新 更多