【问题标题】:React Rendering Component React-IconsReact 渲染组件 React-Icons
【发布时间】:2020-12-12 09:03:33
【问题描述】:

如何根据json文件信息渲染组件?我有一张正在呈现 UL 列表的地图。每个 Li 都被渲染。 (我知道我可以使用 img 来做到这一点,而不是将 src={} 作为 json 文件中的对象传递。但我想知道是否有另一种解决方法。代码如下:

import React from 'react'
import { FiLinkedin as LinkedinIcon, FiGithub as GithubIcon } from 'react-icons/fi';

import Data from '../../socials.json';

import { Container } from './styles';

export default function Profile() {
  return (
    <Container>
      <ul id="profile-links">
        {Data.map((social, index) => {
          return (
            <li id={social.id} key={social.id}>
              <a href={social.url} target="_BLANK" rel="noreferrer">
                <LinkedinIcon size={22} />  // change this component based on -social.icon info-
                <strong>{social.title}</strong>
                <span className="small-link">{social.slug}</span>
              </a>
            </li>
          )
        })}
      </ul>
    </Container>
  )
}

【问题讨论】:

  • social.icon 是否用于有限/固定的图标集?
  • 我只会说 social.icon = FiLinkedin 或 LinkedinIcon。例如:“图标”:“FiGithub”;

标签: reactjs react-icons


【解决方案1】:

我会将您的 socials.json 转换为 socials.js。然后你可以像这样更灵活地设置你的数据:

import {
  FiLinkedin as LinkedinIcon,
  FiGithub as GithubIcon,
} from 'react-icons/fi';

const Data = [
  {
    id: 1,
    url: 'url 1',
    title: 'title 1',
    slug: 'slug 1',
    icon: LinkedinIcon,
  },
  // Other socials...
];

export default Data;

然后您可以像这样在地图中动态呈现这些图标:

// ...
import Data from '../../socials';

export default function Profile() {
  return (
    <Container>
      <ul id="profile-links">
        {Data.map((social, index) => {
          return (
            <li id={social.id} key={social.id}>
              <a href={social.url} target="_BLANK" rel="noreferrer">
                <social.icon size={20} />
                <strong>{social.title}</strong>
                <span className="small-link">{social.slug}</span>
              </a>
            </li>
          );
        })}
      </ul>
    </Container>
  );
}

【讨论】:

    【解决方案2】:

    您可以创建一个方法,该方法将根据social.icon 值为您提供图标。例如:

    const getIcon = (icon) => {
        switch(icon) {
           case A:
            return <IconA />;
           case B:
            return <IconB />;
           default:
            return null;
        }
    }
    

    并在需要的地方调用此 getIcon 方法,并使用 social.icon 作为参数。

    【讨论】:

      猜你喜欢
      • 2019-05-12
      • 2019-11-07
      • 2020-03-22
      • 1970-01-01
      • 2018-05-30
      • 2018-06-16
      • 1970-01-01
      • 2018-01-07
      • 2019-03-23
      相关资源
      最近更新 更多