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
как параметры.