Я предпочитаю хранить свои CSS отдельно, как в файле styles.js
.Возьмите следующий код для примера.Это поддерживает организованность CSS и делает реализацию различных опций довольно чистой.Конечно, добавьте ваш CSS в соответствующие определения
//styles.js
import { css } from 'styled-components';
export const buttonbase = css`/*base styles for all buttons*/`;
export const small = css`/*small size styles*/`;
export const medium = css`/*default size styles*/`;
export const large = css`/*large size styles*/`;
export const floating = css`/*float styles*/`;
И в файле вашего компонента:
//Button.js
import React from 'react';
import PropTypes from 'prop-types';
import styled from 'styled-components';
import * as Styles from './styles';
const propTypes = {
floating: PropTypes.bool,
size: PropTypes.oneOf(['small', 'medium', 'large']),
children: PropTypes.node,
};
const defaultProps = {
floating: false,
size: 'medium',
};
const ButtonBase = styled.button`
${Styles.buttonbase};
${props => (props.floating ? Styles.floating : '')};
${props => Styles[props.size]};
`;
const Button = ({ floating, size, children, ...rest }) => (
<ButtonBase
size={size}
floating={floating}
{...rest}
>
{children}
</ButtonBase>
);
Button.propTypes = propTypes;
Button.defaultProps = defaultProps;
export default Button;
Результат будет, скажем, с учетом следующих значений:
export const buttonbase = css`
border: 1px solid black;
padding: 10px;
`;
export const medium = css`
font-size: 16px;
height: 30px;
`;
export const floating = css`
float: left;
`;
И этот компонент:
<Button size="medium" floating />
Компонент <ButtonBase/>
объединяет buttonbase
, medium
и floating
из импортированных стилей, генерируя полный стиль:
border: 1px solid black;
padding: 10px;
font-size: 16px;
height: 30px;
float: left;