【问题标题】:Retrieve extended styles检索扩展样式
【发布时间】:2019-09-24 21:13:24
【问题描述】:

我的代码是:

styled(Button)`
  color: ${(props: any) => COLOR_I_CHOOSE}
`

我正在关注文档中的“扩展样式”部分 - https://www.styled-components.com/docs/basics#extending-styles

Button 是一个自定义样式的组件。我想传入一种颜色,以便将颜色的内部设置覆盖为COLOR_I_CHOOSE。我可以控制内部。在内部,我试图检测是否提供了任何样式覆盖并使用它。

在内部我这样设置 CSS:

const primaryChildre

nCSS = css`
  color: ${(props: any) => {
    console.log('props:', props);
    // TODO: test if props has override on color and use that
    // PSEUDOCODE: if (props.styleExtensions.color) return props.styleExtensions.color
    return props.inverse
      ? props.theme.ns().colors.brand
      : props.theme.ns().colors.white;
  }};
`;

我在这里注销了props,但不知道如何获得它。我想做上面的伪代码注释。

【问题讨论】:

    标签: styled-components


    【解决方案1】:
    <Button> Hello</Button> // default color
    

    如果传递的颜色不是红色,则以下内容将覆盖默认颜色Button

    const MyRedTextButton = styled(Button)`
      color:  ${(props: any) => props.color === 'red' ? 'inherit' : props.color}
    `
    

    然后:

    <MyRedTextButton color="red"> Hello </MyRedTextButton> // color of 'Hello' = the color of <Button/>
    
    <MyRedTextButton color="blue"> Hello </MyRedTextButton> // color of 'Hello' = blue
    

    这能解决您的问题吗?

    【讨论】:

    • 我真的必须提供customColor 的自定义属性吗?不应该重新设置按钮样式会降低这些样式吗?
    • 您可以硬编码您想要使用的颜色,也可以在我的代码中将其作为道具传递。我不完全理解您的问题-“将这些样式发送下来”是什么意思?到哪里去?
    • primaryChildrenCSS 的预期输出是什么?
    • 我希望如果styled(Button)'color:red' 那么primaryChildrenCSS 应该给颜色red
    • 不,样式化的组件不能那样工作。只有primaryChildrenCSS = styled(MyButton) 才有可能 - 在我的答案中已经覆盖了样式之后
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 2019-10-09
    • 1970-01-01
    相关资源
    最近更新 更多