我想做一个动态的组件。(动态TAG将是样式化组件->情感)
const Dynamic = ({ tag: Tag, children, ...rest }) =>
<Tag {...rest}>
{ children }
</Tag>
该组件将是一个样式化的组件,如:
const Column = styled(div)({ color: 'red' })
const Row = styled(span)({ color: 'yellow' })
这看起来很好,工作正常,BUUUUUT:
当我尝试在另一个DynamicComponent中使用DynamicComponent时:
<DynamicComponent tag={Row}>
{
mapOver.map(item=>
<DynamicComponent tag={Column}/>
)
}
</DynamicComponent>
那么出于某种原因,动态子项将使用动态父项的样式。
我还漏了什么吗
附:
如果不使用动态样式,我会这样做:
<Row>
<Column/>
</Row>
那么样式、className、样式化的标记就被正确地应用。
让我们再清楚一点:
正如你所看到的,DynamicComponent将使用父类的样式、className、样式化标签……(不是我所期望的行为)
3条答案
按热度按时间r6vfmomb1#
下面是为 styled-component 创建动态标签名称的示例:
参考:
dz6r00yl2#
在使用样式化组件时有一个误解,因为标签的目的是作为HTML标签(输入,div等)。最好的方法是分别定义StyledRow和StyledColumn,并使用它们的适当名称。这也将有助于使您的代码更具可读性。
hlswsv353#
您可以使用作为 prop 的样式组件。例如:
或
<Badge as="span" />