Search code examples
styled-components

what is difference between '.attrs()' and 'props' in styled-components?


const Input = styled.input.attrs(props => ({
  // we can define static props
  type: "text",

  // or we can define dynamic ones
  size: props.size || "1em",
}))`
  color: palevioletred;
  font-size: 1em;
  border: 2px solid palevioletred;
  border-radius: 3px;

  /* here we use the dynamically computed prop */
  margin: ${props => props.size};
  padding: ${props => props.size};
`;

render(
  <div>
    <Input placeholder="A small text input" />
    <br />
    <Input placeholder="A bigger text input" size="2em" />
  </div>
);

This example was taken from an official documentation

but, I think this code is same as follows:

const Input = styled.input`
  color: palevioletred;
  font-size: 1em;
  border: 2px solid palevioletred;
  border-radius: 3px;

  margin: ${props => props.size};
  padding: ${props => props.size};
`;

render(
  <div>
    <Input placeholder="A small text input" />
    <br />
    <Input placeholder="A bigger text input" size="2em" />
  </div>
);

i don't understand to difference between '.attrs()' and 'props' in styled-components


Solution

  • Use inline styles (via attrs) if there are changes or something,like animation etc.

    If styles dont change very often then use styled component with static and dynamic styles

    Came across this already answered similar question. Kindly check it out