5. props와 attrs

1. Props

Passed propsarrow-up-right

속성을 받아서 쓰고 싶을 때 유용

대상이 단순한 요소일 경우, styled-components는 HTML 속성을 통해 DOM으로 전달 사용자 지정 React 컴포넌트인 경우, 스타일 컴포넌트는 모든 props를 통과함 템플릿 리터럴을 이용해서 조건부 스타일 등을 표현

  • 활성화 여부 표현

  • 특정 스타일을 잡아주고 싶을 때

  • 조건부 스타일링 가능

사용 방법

🔗 실습 링크arrow-up-right

import { useBoolean } from 'usehooks-ts';

import styled, { css } from 'styled-components';

type ParagraphProps = { 
    active?: boolean;
}

const Paragraph = styled.p<ParagraphProps>`
    color: ${(props) => (props.active ? '#F00' : '#888')};
    ${(props) => props.active && css`
    	font-weight: bold;
    `}
`;

export default function Greeting() {
    const { value: active, toggle } = useBoolean(false);
    
    return (
        <div>
            <Paragraph>Inactive</Paragraph>
            <Paragraph active>Active</Paragraph>
            <Paragraph active={active}>
                Hello, world
                {' '}
                <button type="button" onClick={toggle}>
                    Toggle
                </button>
            </Paragraph>
        </div>
    );
}

💡 styled-components 의 { css } 를 활용하면, 단순 문자열이 아닌 CSS 처럼 사용할 수 있음 💡 <ParagraphProps> 타입을 사용하지 않으려면 <{ active: boolean }> 의 형태로 직접 적는 것도 가능

✍️ 조각글

왜 props를 이용할 때 ${(props) => props.active && css} 의 방식으로 적는지 몰랐는데 css를 제외하고 작성해보니 불편함을 알게 되었다. 스타일 코드를 문자열로 인식해서 CSS를 작성하기 어려웠다. 잘 모르면서 원래 그런가보다 하고 썼던 styled를 사용하는 이유에 대해서도 알게 됐고, css의 존재 이유도 알게 되어 즐겁다.

2. attrs

Attaching additional propsarrow-up-right .attrsarrow-up-right

기본 속성을 추가할 수 있음 불필요하게 반복되는 속성을 처리할 때 유용

  • <button> 등을 만들 때 적극 활용

    • type="button" 등을 무조건 써야 하는데, 안 쓰면 오류가 발생

    • styled.button.attrs({ type: 'button' }) 형태로 작성

.attrs

스타일 컴포넌트에 일부 props를 연결하는 연결 가능한 메소드 첫 번째이자 유일한 인수는 컴포넌트의 나머지 props에 병합될 객체

각 래퍼가 .attrs중첩 사용을 재정의(override) 할 수 있음 스타일시트에서 나중에 정의된 css 속성이 이전 선언을 덮어쓰는 방식과 유사

사용 방법

🔗 실습 링크arrow-up-right

Last updated