首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用styled-components和React高效地为组件添加变体

如何使用styled-components和React高效地为组件添加变体
EN

Stack Overflow用户
提问于 2020-11-11 19:39:16
回答 1查看 357关注 0票数 1

作为一名新手程序员,使用React for前端处理个人项目。

我想创建一个使用styled-components包的按钮组件,可以在应用程序中重新使用在略有不同的大小,颜色和悬停行为。按钮可能会出现在单独的帖子中,在导航栏中,表单等等。到目前为止,我只在几种情况下使用过它,组件的代码已经变得有点笨拙了。现在看起来是这样的:

代码语言:javascript
复制
import styled from 'styled-components';
import { Link } from 'react-router-dom';

const Button = styled(Link)`
  margin: 5px;
  display: grid;
  place-items: center;
  font-size: 1em;
  padding: 0 1em;
  height: ${props => (props.small ? '35px' : '40px')};
  background: ${props => (props.nav ? props.theme.color.white : '#30336b1a')};
  border-radius: ${props => (props.small ? '3px' : '5px')};
  color: ${props => (props.nav ? props.theme.color.forest : '#30336b')};
  border: ${props =>
    props.outline ? `2px solid ${props.theme.color.forest}` : null};
  text-decoration: none;
  transition: 0.2s ease-in-out;

  &:hover {
    background: ${props => (props.nav ? props.theme.color.forest : '#f6e58d')};
    color: ${props => (props.nav ? props.theme.color.white : null)};
  }
`;

export default Button;

到目前为止,smallnavoutline都是变体名称,我认为还需要再添加几个。但是整个props=> props.variant? do-this: or-that;变得笨拙和不可读。

我可以扩展组件并创建多个ButtonVariant组件,或者使用if-else或switch语句返回适当样式的变体。这两种方法似乎都不会通过使用styled(Button)来扩展它们来重复代码,但我想知道,根据经验丰富的人的说法,什么才是好的性能明智和代码库可维护性明智。文档和大量的在线研究还没有给出一个好的答案。

EN

回答 1

Stack Overflow用户

发布于 2020-11-11 19:49:13

您可以在外部创建一个函数并从中获得返回值。您可以有条件地检查ifswitch()案例:

代码语言:javascript
复制
const createButton = prop => {
    switch(prop){
       case 'sm':
         return '30px';
       case 'md':
         return '35px';
       //--------------You can add more other properties for cases and return
       default:
         return '40px';
    }
};


const Button = styled(Link)`
  height: ${props => createButton(props) };
`;

这只是一个粗略的想法。可能对你的情况有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64785703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档