我们怎样才能避免在 styled-components 中写下${props => props.myProp}
?
例如,如果我们设计一个按钮样式:
const Button = styled.button`
background: ${props => props.background};
color: ${props => props.color};
`;
render(
<div>
<Button
background="red"
color="white"
>
Example 1
</Button>
<Button
background="black"
color="yellow"
>
Example 2
</Button>
</div>
);
在文档here和here中,我们需要编写类似${props => props.myProp}
的内容。但这看起来很烦人且不必要。
如果我们只能写${props.myProp}
会更好。
我目前的解决方法是编写类似的内容:
const Button = styled.button`${props => `
background: ${props.background};
color: ${props.color};
`}`;
但这并不像仅使用${props.color}
那样简单明了。
那么,我们怎么做呢?
答案 0 :(得分:2)
您可以编写一个辅助函数,可以在任何想要从道具中提取道具的地方使用:
const props = name => p => p[name];
然后使用它:
const Button = styled.button`
background: ${props('bgColor')};
`;
使用props('bgColor')
与props.bgColor
的语法相似性尽可能接近,同时仍保持正确的行为。
如果你想要一丝不苟,你可以创建一个变量,而不是直接传递一个字符串:
const bg = 'bgColor';
const Button = styled.button`
background: ${props(bg)};
`;
根据评论mxstbr的建议,您可能还需要styled-props包。