React Rendering Component React-иконки

Как визуализировать компонент на основе информации о файле json? У меня есть карта, которая отображает список UL. Рендерится каждый Ли. (Я знаю, что могу сделать это с помощью 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>
  )
}

2 ответа

Я бы преобразовал ваш 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>
  );
}

Вы можете создать метод, который будет отображать значок в зависимости от social.iconзначение. Например:

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

И вызовите этот метод getIcon там, где он вам нужен, с помощью social.icon как параметры.

Другие вопросы по тегам