如何避免$ {props => props.myProp}在样式组件中?

时间:2017-06-26 21:07:28

标签: javascript reactjs react-dom styled-components

我们怎样才能避免在 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>
);

在文档herehere中,我们需要编写类似${props => props.myProp}的内容。但这看起来很烦人且不必要。 如果我们只能写${props.myProp}会更好。

我目前的解决方法是编写类似的内容:

const Button = styled.button`${props => `
    background: ${props.background};
    color: ${props.color};
`}`;

但这并不像仅使用${props.color}那样简单明了。

那么,我们怎么做呢?

1 个答案:

答案 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包。