Я пошел с тем же вопросом в личном проекте, который я строю.Первая проблема, которую я обнаружил, была связана с тем, как динамически отображать значок из запроса? Контейнер основного приложения:
import React from "react"
import Header from "../components/header"
import Navigation from "../components/navigation"
import Footer from "../components/footer"
import containerStyles from "./styles.module.less"
import { library } from "@fortawesome/fontawesome-svg-core"
import { fab } from "@fortawesome/free-brands-svg-icons"
library.add(fab)
const IndexPage = ({ data }) => (
<div className={containerStyles.home}>
<div className={containerStyles.menu}>
<Header />
<Navigation />
</div>
<Footer />
</div>
)
export default IndexPage
Кроме того, мои значки являются частью бесплатной версии бренда, поэтому импортировали их в библиотеку.
Итак, первое, что я сделалдолжен был импортировать библиотеку и создать пару нулевых переменных в моем дочернем компоненте, одну для префикса, а другую для самого значка:
В моем проекте яЯ потребляю данные из конечной точки API, запрос, который я построил для получения информации, выглядит следующим образом:
Теоретически все было установлено только для отображения массива и рендеринга каждого из них.item, как мы обычно делаем:
<FontAwesomeIcon
icon={[
(faprefix = document.node.prefix),
(faicon = document.node.icon),
]}
size="lg"
/>
Но дочерний компонент ничего не рендерил.Почему это было?Просто из-за того, что document.node.prefix и document.node.icon возвращают строки, поэтому, когда компонент отображал данные из массива, он заканчивал попытки визуализировать что-то вроде этого:
<svg data-prefix="'fab'" data-icon="'github'" >
Обратите внимание, что одиночная кавычка заключает в себе строку
Мое решение для этого заключалось в использовании метода replace () с регулярным выражением для удаления кавычек:
<FontAwesomeIcon
icon={[
(faprefix = document.node.prefix.replace(/'/g, "")),
(faicon = document.node.icon.replace(/'/g, "")),
]}
size="lg"
/>
Компонент нижнего колонтитула
import React from "react"
import { StaticQuery, graphql } from "gatsby"
import containerStyles from "../pages/styles.module.less"
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"
let faicon = null
let faprefix = null
const Navigation = ({ data }) => (
<StaticQuery
query={graphql`
query FooterTemplate {
allStrapiLink {
edges {
node {
id
icon
url
prefix
}
}
}
}
`}
render={data => (
<>
<footer>
<p>Freddy Polanía {new Date().getFullYear()}</p>
<div className={containerStyles.links}>
{data.allStrapiLink.edges.map(document => (
<div key={document.node.id}>
<a
href={document.node.url}
rel="noopener noreferrer"
target="_blank"
>
<FontAwesomeIcon
icon={[
(faprefix = document.node.prefix.replace(/'/g, "")),
(faicon = document.node.icon.replace(/'/g, "")),
]}
size="lg"
/>
</a>
</div>
))}
</div>
</footer>
</>
)}
/>
)
export default Navigation
Теперь мои значки отображаются из данных конечной точки.Надеюсь, это поможет решить вашу проблему.