Next.js와 Styled-Components 사용 시 Unknown Prop Warning 해결하기

2024. 11. 20. 12:20·Next.js

1. 문제 상황

Next.js 프로젝트에서 styled-components를 사용해 스타일링을 적용하던 중, 다음과 같은 경고 메시지가 콘솔에 출력되었습니다.

styled-components: it looks like an unknown prop "bold" is being sent through to the DOM, which will likely trigger a React console error. If you would like automatic filtering of unknown props, you can opt-into that behavior via `<StyleSheetManager shouldForwardProp={...}>` (connect an API like `@emotion/is-prop-valid`) or consider using transient props (`$` prefix for automatic filtering.)
...

2. 원인 분석

styled-components가 HTML DOM에 표준 속성이 아닌 props(bold, gray, paddingLeft)를 전달하면서 해당 경고가 발생합니다.
React는 HTML DOM에 표준 속성이 아닌 props가 포함되면 경고를 표시하는데, HTML <div>요소에 bold 같은 속성은 없기 때문에 경고가 발생하게 되는 것 입니다.

3. 해결방법 : Transient Props 사용하기

이 문제를 해결하기 위해 styled-components에서 제공하는 Transient Props 기능을 사용했습니다. Props는 props 앞에 $를 붙여주면 해당 props가 DOM에 전달되지 않도록 자동으로 필터링해 줍니다.

수정 전 코드

const StyledText = styled.div<StyledTextProps>`
    font-family: ${(props) => props.theme.fonts.HangeulFontRegular};

    ${(props) =>
        props.bold &&
        css`
            font-weight: bold;
            font-size: ${props.theme.fontSizes.medium};
        `}

    ${(props) =>
        props.gray &&
        css`
            color: gray;
            margin-left: 20px;
            padding: 10px;
            font-size: 17px;
        `}

    ${(props) =>
        props.paddingLeft &&
        css`
            padding-left: 30px;
        `}
`;
<StyledText bold> TEXT1 </StyledText>
<StyledText bold paddingLeft> TEXT2 </StyledText>

수정 후 코드

const StyledText = styled.div<StyledTextProps>`
    font-family: ${(props) => props.theme.fonts.HangeulFontRegular};

    ${(props) =>
        props.$bold &&
        css`
            font-weight: bold;
            font-size: ${props.theme.fontSizes.medium};
        `}

    ${(props) =>
        props.$gray &&
        css`
            color: gray;
            margin-left: 20px;
            padding: 10px;
            font-size: 17px;
        `}

    ${(props) =>
        props.$paddingLeft &&
        css`
            padding-left: 30px;
        `}
`;
<StyledText $bold> TEXT1 </StyledText>
<StyledText $bold $paddingLeft> TEXT2 </StyledText>

 

저작자표시 비영리 변경금지 (새창열림)

'Next.js' 카테고리의 다른 글

[Next.js] Image is missing required "src" property:  (0) 2023.08.16
[error] next start/ next build 시 에러  (0) 2023.07.04
'Next.js' 카테고리의 다른 글
  • [Next.js] Image is missing required "src" property:
  • [error] next start/ next build 시 에러
BS Kwak
BS Kwak
  • BS Kwak
    Slow but steady wins the race
    BS Kwak
  • 전체
    오늘
    어제
    • 카테고리 (161)
      • Project (2)
      • Next.js (3)
      • HTML+CSS+JS (17)
      • Computer Science (139)
        • Programming Language (52)
        • 자료구조와 알고리즘 (75)
        • Digital circuit (3)
        • 기타 error (9)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    티스토리챌린지
    leetcode
    LNK2001
    mysql error
    c++error
    런타임 에러
    cmd error
    오블완
    해시
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
BS Kwak
Next.js와 Styled-Components 사용 시 Unknown Prop Warning 해결하기
상단으로

티스토리툴바