Внимание к именованию очень важно.
Стилизованные компоненты, как следует из названия, предназначены для стилизации собственных элементов DOM или пользовательских компонентов.
attrs
, если для упоминания атрибутов этого самого элемента DOM в конструкторе attrs
нет необходимости даже упоминать его в фактическом компоненте
Что означает строка выше
<Input placeholder="A small text input" size="1em"
не имеет атрибута type
. Он пришел из вашей функции конструктора атрибута (статический)
Вы не могли бы сделать это иначе в ваших правилах стиля, потому что это просто строковый литерал ваших CSS
свойств.
Вы можете заметить, что это спасло вас от написания type='password'
при каждом использовании
<Input type='password' ... />
Теперь это конкретный компонент с типом ввода пароля. Если хотите, вы можете получить общий input
, допустив, что атрибут type
будет выглядеть примерно так:
const Input = styled.input.attrs(({ size, type }) => ({
type: type || "password",
...
Ваш type
теперь является динамическим, то есть он будет принимать любой тип ввода, который вы указали при использовании компонента, и отображать входные данные как этот тип (текст, пароль, файл и т. Д.), Или он будет просто password
печататься как дефолт. Вы можете использовать столько условной логики, сколько захотите.
Надеюсь, что ответит на ваш вопрос.