Я хочу сделать динамический компонент. (динамический ТЕГ будет стилизованным компонентом -> эмоция)
const Dynamic = ({ tag: Tag, children, ...rest }) =>
<Tag {...rest}>
{ children }
</Tag>
Компонент будет стилизованным, например:
const Column = styled(div)({ color: 'red' })
const Row = styled(span)({ color: 'yellow' })
Все выглядит красиво и работает правильно, БУУУУУТ:
Когда я пытаюсь использовать DynamicComponent внутри другого DynamicComponent:
<DynamicComponent tag = {Row}>
{
mapOver.map(item=>
<DynamicComponent tag = {Column}/>
)
}
</DynamicComponent>
тогда по какой-то причине динамические дочерние элементы будут использовать стиль динамического родителя.
Что мне не хватает?
P.S .:
Если вместо использования динамических стилей я сделаю что-то вроде этого:
<Row>
<Column/>
</Row>
затем правильно применяются стили, classNames, стилизованные теги.
Чтобы было немного понятнее:
Как вы можете видеть, DynamicComponent будет использовать родительские стили, имена классов, стилизованные теги ... (НЕ ТАКОЕ ПОВЕДЕНИЕ, КОТОРОЕ Я БЫЛА ОЖИДАЕМ)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Существует неправильное понимание использования стилизованных компонентов, поскольку тег предназначен как тег HTML (input, div и т. д.). Лучше всего определить StyledRow и StyledColumn отдельно и использовать их с соответствующими именами. Это также поможет сделать ваш код более читабельным.
// All headings use the same styled-component "Heading" function
const StyledHeading = styled.div`
font-size: ${({level}) => 4/level }em; // <- dynamic font size
font-weight: 300;
margin: 0;
`
// the trick here is the "as = {...}" to create dynamic tag name
const Heading = ({level = 1, children}) =>
<StyledHeading as = {`h${level}`} level = {level}>
{children}
</StyledHeading>
ReactDOM.render([
<Heading>Hello, world!</Heading>,
<Heading level = {2}>Title 2</Heading>,
<Heading level = {3}>Title 3</Heading>
] ,document.body
)<script src = "https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<script src = "https://unpkg.com/[email protected]/dist/styled-components.min.js"></script>
Имеет смысл, я просто хотел проверить, как другие видят такие вещи. Спасибо друг! :)