如何从对象数组中迭代和提取单个对象以在 React 中呈现

How to iterate and extract single objects from an array of objects to render in React

我从 API 获取一些数据,这些数据以对象数组的形式出现,我想提取它们并解构它们,以便我可以使用它们在 React 中呈现组件。我已经取得了一些成就,但通过这种方式我不是 KISS 并且渲染它是为每个项目创建 6 次所以我有 24divs。

数据是这样的,包含 48 个对象的“每小时”数组。我已经将数组切片为只使用六个,因为我需要的。

"hourly": [
{
  "dt": 1618315200,
  "temp": 282.58,
  "feels_like": 280.4,
  "pressure": 1019,
  "humidity": 68,
  "dew_point": 276.98,
  "uvi": 1.4,
  "clouds": 19,
  "visibility": 306,
  "wind_speed": 4.12,
  "wind_deg": 296,
  "wind_gust": 7.33,
  "weather": [
    {
      "id": 801,
      "main": "Clouds",
      "description": "few clouds",
      "icon": "02d"
    }
  ],
  "pop": 0
},
...

这是我在 return 和部分标签中得到的,它确实有效,但我认为这不是最好的方法,而且正确设置样式也是一场噩梦,因为它创建了六个每次项目:

<div className="weather-info-extra">
    {shortedArr.map((i, index) => (
      <div key={index}>
        {new Date(i.dt * 1000).toLocaleTimeString([], {
          timeZone: timezone,
          hour: '2-digit',
          minute: '2-digit',
          hour12: true,
        })}
      </div>
    ))}
    {shortedArr.map((i, index) => (
      <div key={index}>{i.weather.map(w => w.description)}</div>
    ))}
    {shortedArr.map((i, index) => (
      <div key={index}>{i.temp} C</div>
    ))}
    {shortedArr.map((i, index) => (
      <div key={index}>
        <p>Rain</p>
        {i.pop}%
      </div>
    ))}
  </div>

我知道我缺少一种非常明显的方法来从数组中获取每个对象,以便更好地渲染它。

你是对的,你可以更有效地做到这一点。您只需要映射一次。您可以使用一个片段来封装多个元素,这个片段从不渲染但允许您有多个子元素。

shortArray.map((data, index) => (
    <React.Fragment key={index}>
        <div>{data.time}</div>
        <div>{data.weather}</div>
        // anything else you want rendered
    <React.Fragment />
));

你不需要多次映射这个数组。

附带说明一下,不需要键的片段可以在 JSX 中写成空标签:

<> /** React fragment code here */ </>