0

我想要实现的是这样的:

import styled from 'react-emotion'

const StyledComponent = styled(({tag}) => tag)`
    // some css styles
`

并像这样使用它:

<StyledComponent tag=div"/>
<StyledComponent tag="p"/>
<StyledComponent tag="ul"/>
// etc

我的期望是它应该生成如下 HTML:

<div class="some-class"></div>
<p class="some-class"></p>
<ul class="some-class"></ul>

实际输出:

div
p
ul

我的问题是,这可以实现还是我错过了什么?

4

2 回答 2

2

你用react-emotion错了,试试这个。

const StyledComponent = ({ tag, children, ...props }) => {
  const Container = styled(tag)`
    background-colo: red;
  `;
  return <Container {...props}>{children}</Container>;
};

演示:https ://codesandbox.io/s/lr4xxp3757

于 2018-06-21T06:09:50.803 回答
2

似乎我已经找到了解决问题的方法。为可能遇到相同问题的人分享我的答案。

我将StyledComponent声明更改为以下内容:

import styled from 'react-emotion'

const StyledComponent = styled(({tag, children, ...props}) => React.createElement(tag, props, children))`
    // some css styles
`

这按预期工作。

如果有人有更好的答案,请发帖。谢谢

于 2018-06-21T06:25:05.373 回答