Расширение компонентов в rebass.js?

Начинающий здесь. На данный момент я могу использовать Box вот так:

<Box
  p={5}
  fontSize={4}
  width={[ 1, 1, 1/2 ]}
  color='white'
  bg='magenta'>
  Box
</Box>

и дать ему определенные реквизиты, как сказано на сайте:

All margin and padding props
width: responsive width
fontSize: responsive font size
color: text color
bg: background color
flex: CSS flex shorthand property
order: CSS order property
alignSelf: CSS align-self property

Вопрос: Что делать, если мне нужно больше реквизита?

Я знаю, что могу расширить компоненты ребасса, однако это, кажется, жестко закодирует определенные свойства CSS в компоненте. Например, если моя коробка всегда фиолетовая, я могу создать PurpleBox и сохранить цвет там. Или на их сайте есть этот пример:

const Container = props =>
  <Box
    {...props}
    mx='auto'
    css={{
      maxWidth: '1024px'
    }}
  />

Справедливо! Что, что мне нужно для создания компонента, скажем, PositionedBox который получает дополнительный position опора для относительного или абсолютного позиционирования?

Я хотел бы использовать это так:

<Box
  p={5}
  fontSize={4}
  width={[ 1, 1, 1/2 ]}
  color='white'
  bg='magenta'
  position='abs'>
  Box
</Box>

Это возможно? Не уверен, как я мог сделать это.

1 ответ

Вы могли бы использовать styled-components а также

      import styled from "styled-components";
import { position } from "styled-system";

// through interpolation

const StyledBox = styled(Box)`
 // some properties
    ${position}
`;

// passing as a single property
const StyledBox = styled(Box)(position);

передача нескольких свойств

      import { compose, property1, property2, ... } from "styled-system";

import StyledBox = styled(Box)(compose(property1, property2, ....));

это расширит все свойства позиции, поддерживаемые системой стилей. список всех готовых свойств, поддерживаемых styled-system здесь

Другие вопросы по тегам