微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

styled-component - 传递道具最佳实践

如何解决styled-component - 传递道具最佳实践

想象一个这样的场景:您创建一个主题并将其传递给 ThemeProvider。 它可能看起来像这样:

const theme = {
   palette: {primary: {main: 'blue',contrastText: 'white'},surface: 'gray'},borderWidth: '1px',shadowMixin: size => `0px 0px ${size} black`
}

然后你创建一个组件:

const Something = styled.div`
   color: ${props => props.theme.palette.primary.contrastText};
   background: ${({theme}) => theme.palette.surface};
   border: ${props => props.theme.borderWidth} solid ${({theme}) => theme.palette.primary.main};
   Box-shadow: ${props => props.theme.shadowMixin('10px') };
`;

嗯……看起来很乱。您可以使用对象销毁、伪造的 mixin 或其他任何方式,但是当您在每一行中不断传递函数时,很难保持干净。我想过做这样的事情:

const Something = styled.div`
  ${({ theme: { palette,borderWidth,shadowMixin } }) => {
    css`
       color: ${palette.primary.contrastText};
       background: ${palette.surface};
       border: ${borderWidth} solid ${palette.primary.main};
       Box-shadow: ${ shadowMixin('10px') };
    `;
  }}
`;

但它也不完美。

有没有更好的方法解决这个问题?

解决方法

好吧,我认为文档没有提到它,但显然这样的语法也有效:

const Something = styled.div(
  ({ theme: { palette,borderWidth,shadowMixin } }) => css`
       color: ${palette.primary.contrastText};
       background: ${palette.surface};
       border: ${borderWidth} solid ${palette.primary.main};
       box-shadow: ${ shadowMixin('10px') };
    `
);

它看起来好多了,我认为没有比这更好的了。 但是,如果您有一些想法,请随时分享。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。