编辑:其实我错了,第一个例子也行不通!它还插入代码!
我正在尝试使用styled-components css prop api,但遇到了以下问题:
此代码运行良好:
const myCss = css<PropsWithTheme>`
width: 100px;
height: 100px;
color: ${props => props.theme.color};
`
const MyComponent = () => <div css={myCss.toString()} />
但以下没有:
const getCss = (color: strinbg) => css<PropsWithTheme>`
width: 100px;
height: 100px;
color: ${color}; // I tried injecting the color directly
color: ${() => color}; // And also returning it from a callback inside the css``, just as I would access props/theme
`
const MyComponent = () => <div css={getCss('red').toString()} />
这里的输出 css 是width: 100px; height: 100px; color: ,red,; ,() => color,;
,这显然是无效的。
使用模板字符串插值对输出进行字符串化可以解决问题,但由于 Prettier 强制执行此格式,导致可读性非常差:
const MyComponent = () => (
<div
css={`
${getCss('red')}
`}
/>
)
不幸的是,将插值移动到 css 道具定义之外的任何地方(在组件主体中或创建字符串化函数)会破坏功能(道具/主题访问,所有 css 根本不会被应用)。
它似乎与这个问题有关:https ://github.com/styled-components/styled-components/issues/1641 ,但建议的解决方案是使用css
我已经在做的帮助函数:(
我的问题有简单的解决方法吗?