Гэтсби 2.4.11
У меня есть компонент, который воплощает раздел на моем сайте (источник внизу). Я включаю компонент Section на страницы,
import SomeIcon from '../images/icons/something.svg'
const SomePage = () => (
<Section title = "Lorum Ipsum" icon=<SomeIcon/>>
<p>Lorum ipsum dolor sit amet</p>
</Section>
)
Это работает и отображает страницу правильно. Однако этот синтаксис icon=<SomeIcon/> глубоко оскорбляет меня до глубины души. Кроме того, это отключает проверку синтаксиса и синтаксическую окраску моего текстового редактора. Я хочу переключить его на {}
<Section title = "Lorum Ipsum" icon = {SomeIcon}>
Однако с таким синтаксисом значок не отображается. Это просто пусто. Как передать изображение как свойство с закорючками {}?
import React from 'react'
import PropTypes from 'prop-types'
const Section = ({ children, icon, title, background, fullWidth }) => (
<section style = {{background:background}}>
<div class = "wrap">
<h2>{title}</h2>
<span class = "icon">{icon}</span>
<div class = "content">
{children}
</div>
</div>
</section>
)
Section.propTypes = {
title: PropTypes.string,
icon: PropTypes.string,
background: PropTypes.string,
fullWidth: PropTypes.boolean,
}
Section.defaultProps = {
title: ``,
icon: ``,
background: ``,
fullWidth: false,
}
export default Section
Разве это не должно быть как минимум icon = {<SomeIcon/>}?
@ user3210641 ƒ SomeIcon (props) { return React.createElement(... @bitsapien объяснил это в своем ответе. Мне нужно вызвать функцию.





Это довольно аккуратный рефакторинг. Вы, вероятно, должны попробовать сделать это вместо того, чтобы заставить его работать. Это связано с тем, что когда вы передаете компонент в качестве реквизита, он не создается. Он должен быть создан внутри.
Section.js
import React from 'react'
import PropTypes from 'prop-types'
const Section = ({ children, icon, title, background, fullWidth }) => (
<section style = {{background:background}}>
<div class = "wrap">
<h2>{title}</h2>
<span class = "icon">{icon()}</span> {/* Notice this line */}
<div class = "content">
{children}
</div>
</div>
</section>
)
Section.propTypes = {
title: PropTypes.string,
icon: PropTypes.func, // Notice this line
background: PropTypes.string,
fullWidth: PropTypes.boolean,
}
Section.defaultProps = {
title: ``,
icon: ``,
background: ``,
fullWidth: false,
}
export default Section
Каков результат
console.info(SomeIcon)? Насколько я знаю, когда вы импортируете файл SVG, он возвращает только свой путь...