我一直在使用这种方法从一个数组中渲染多个自定义元素,但这是我第一次使用 map 数据 struct .它编译得很好,但没有呈现任何内容.我已经建立了一个代码Sandbox here.

import "./styles.css";
import React from "react";
import ImageGrid from "./ImageGrid";

interface OnlineImage {
  id: string;
  url: string;
}

export default function App() {
  const [onlineImages, setOnlineImages] = React.useState<Map<string, OnlineImage[]>>();
  
  React.useEffect(() => {
    let onlineImageMap = new Map<string, OnlineImage[]>();

    // fake api call
    onlineImageMap.set("randomImageSet1", [
      { id: "1", url: "https://picsum.photos/200" },
      { id: "2", url: "https://picsum.photos/200" }
    ]);
    onlineImageMap.set("randomImageSet2", [
      { id: "1", url: "https://picsum.photos/200" },
      { id: "2", url: "https://picsum.photos/200" }
    ]);

    // set state
    setOnlineImages(onlineImageMap);
  }, []);

  return (
    <div className="App">
      <div>Below should render my custom ImageGrid for each item in map...</div>
      <>
        {onlineImages?.forEach((imageSet, category) => {
          return (
            <>
              <div>Image Category: {category}</div>
              <ImageGrid images={imageSet} />
            </>
          );
        })}
      </>
    </div>
  );
}

推荐答案

嗨,塞缪尔:我认为你应该首先把 map 转换成一个数组,然后使用Array.prototype.map方法,它实际上返回一个原始数组的副本,并应用你的函数.

正如您可能已经发现的那样,return语句在forEach函数中没有任何作用(更确切地说,它只会停止代码的执行,但不会将任何内容带回外部上下文).

如果你真的想使用forEach,你必须使用数组或对象来捕捉它,然后使用Object.条目/.映射以在其上迭代


const myMap = new Map(Object.entries({a: 1, b: 2}))
const myMapCaptureList = []
myMap.forEach((value, key) => {
myMapCaptureList.push([key, value])
}
// then you can use myMapCaptureList
myMapCaptureList.map(([key, value]) => <div>{key}: <span>{value}</span></div>);

但我建议使用非常有用的Array.from方法更容易,它可以帮助将一个映射转换为一个键/值对条目数组:[[key1, val1], [key2, val2]].它基本上相当于运行Object.entries(someObject).

{Array.from(onlineImages || []).map(([category, imageSet]) => {
          return (
            <>
              <div>Image Category: {category}</div>
              <ImageGrid images={imageSet} />
            </>
          );
        })}

Reactjs相关问答推荐

在触发onClick事件时,无法将焦点设置在material UI中的工具提示组件的内容上,但在触发onKeyPress事件时可以

重新加载页面时始终出现汉堡菜单

一键MUI导出

在Map()完成React.js中的多个垃圾API请求后执行函数

GitHub页面未正确显示Reaction应用程序网站

自定义变量默认、聚焦和填充时所需TextField中标签的星号 colored颜色

如何使用react-router-dom保护嵌套在受保护路由中的嵌套路由?

tRPC/react-query,在所有查询完成之前,组件不会收到任何 useQuery 的结果

如何在不同的路由中渲染相同的页面组件(包括 getServerSideProps)

使用获取的数据更新状态,但在try console.log 时它给出未定义

Redux 工具包不更新状态

如何在 React 过滤器中包含价格过滤器逻辑?

Zod 验证模式根据另一个数组字段使字段成为必需字段

MUI - ButtonGroup fullWidth 条件屏幕大小不起作用?

如何在react 中更新子组件中的变量?

在 Remix 中使用 chartjs 和 react-chartjs-2 会出现错误react-chartjs-2未在您的 node_modules 中找到

将 Material UI 菜单渲染为

react-admin useGetIdentity 只返回全名,id 未定义 头像未定义

如何在 React 中的 Material Ui 多选中设置默认值?

Rtk 查询无效标签不使数据无效