繁体   English   中英

在 JSON 数组 object map 中反应 JSX

[英]React JSX in JSON array of object map

提供了一个 JSON 带有名称的图标数组。 我想要 map JSX 但在 output 中没有显示为 JSX 元素(图标),代码使用 Material-UI 元素和图标:

import * as React from 'react';
import {Box, Paper, Typography} from '@mui/material';
import WorkIcon from '@mui/icons-material/Work';
import Settings from '@mui/icons-material/Settings';
const iconsSet = [
  {
    name: 'WorkIcon',
    icon: ()=> (<WorkIcon/>),   {/* JSX as fields value */}
  },
  {
    name: 'Settings',
    icon: () =>(<Settings/>),
  }
];
export default function Icons() {
  return (
    <Box>
      {iconsSet.map(({name,icon})=>(
        <Paper>
          {icon} {/* Nothing Shows  */}
          <Typography>{name}</Typography>
        </Paper>
      ))}
    </Box>
    );
}

链接到 Codesandbox

你必须用首字母大写来命名 JSX 元素,试试 object 键中的Icon

const iconsSet = [
  {
    name: 'WorkIcon',
    Icon: ()=> (<WorkIcon/>),   {/* JSX as fields value */}
  },
  {
    name: 'Settings',
    Icon: () =>(<Settings/>),
  }
];

然后在map()中的 JSX 中使用它,如下所示:

<Box>
  {iconsSet.map(({name,Icon})=>(
    <Paper>
      <Icon />
      <Typography>{name}</Typography>
    </Paper>
  ))}
</Box>

尝试

import * as React from 'react';
import {Box, Paper, Typography} from '@mui/material';
import WorkIcon from '@mui/icons-material/Work';
import Settings from '@mui/icons-material/Settings';
const iconsSet = [
  {
    name: 'WorkIcon',
    icon: ()=> (<WorkIcon/>),   {/* JSX as fields value */}
  },
  {
    name: 'Settings',
    icon: () =>(<Settings/>),
  }
];
export default function Icons() {
  return (
    <Box>
      {iconsSet.map(({name,icon})=>(
        <Paper>
          {icon()} {/* here is the change  */}
          <Typography>{name}</Typography>
        </Paper>
      ))}
    </Box>
    );
}

暂无
暂无

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

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