#javascript #css #styled-components
#javascript #css #styled-components
Вопрос:
Могу ли я в любом случае удалить атрибуты, унаследованные тем styled-component
, который был расширен от другого?
Я приведу действительно довольно глупый фрагмент кода, просто чтобы проиллюстрировать, что я имею в виду:
const FormInput = styled.input.attrs({
type: "text",
})`
border-color: blue;
color: red;
${({$size}) => `
height: ${$size}rem;
width: ${$size}rem;
`}
`;
const Label = styled(FormInput)``
type: "text"
наследуется Label
. Есть ли в любом случае, что я не мог отобразить его в этом случае? Допустим, что я бы сделал <Label as="Label" />
в этом случае
Ответ №1:
Начиная с версии 5.1, вы можете передавать shouldforwardprop
предикат .withConfig()
и отфильтровывать свойства, которые вы не хотите отображать:
const Label = styled(FormInput).withConfig({
shouldForwardProp: (prop, defaultValidatorFn) =>
!['type'].includes(prop)
amp;amp; defaultValidatorFn(prop),
})``;
Чтобы отфильтровать несколько свойств, извлеките массив в const
:
const forbiddenProps = ['type', 'placeholder'];
const Label = styled(FormInput).withConfig({
shouldForwardProp: (prop, defaultValidatorFn) =>
!forbiddenProps.includes(prop)
amp;amp; defaultValidatorFn(prop),
})``;
Комментарии:
1. Я понимаю… У меня есть понимание этого API, но я не думал, что это будет вариант использования. Большое спасибо! Теперь, каков был бы хороший синтаксис на случай, если я захочу отфильтровать несколько реквизитов? В вашем примере, который является тем же синтаксисом, что и в официальных документах, это сделало бы это совершенно нечитаемым.