
발생한 오류 🔥
import { useState } from "react";
import styled from "styled-components";
const StBox = styled.div`
width: 100px;
height: 100px;
border: 1px solid ${(props) => props.borderColor};
margin: 20px;
`;
function App() {
return (
<>
<StBox borderColor={boxColor}>
박스
</StBox>
</>
);
}

예제를 테스트해 보는 과정에서 it looks like an unknown prop "borderColor" is being sent through to the DOM, which will likely trigger a React console error.
오류가 발생했습니다.
해석하면 "알 수 없는 prop borderColor가 DOM을 통해 전송되는 것 같습니다. 이로 인해 React 콘솔 오류가 발생할 가능성이 높습니다."라는 오류였습니다.
해결 과정 🔎
styled-components: API Reference
API Reference of styled-components
styled-components.com
해당 오류를 styled-components 공식 문서에서 서치 해 본 결과 스타일이 적용된 요소에서 사용될 props
가 React 노드나 DOM 요소에 렌더링이 되는 걸 방지해 주기 위해 발생하는 오류였습니다.
해결 방법 ✨
React 노드로 전달되거나 DOM 요소에 렌더링 되는 것을 방지하기 위해 prop 이름 앞에 달러 기호($)를 접두사로 붙여서 일시적인 prop으로 변경해 DOM에 렌더링 되는 걸 방지했습니다.
import { useState } from "react";
import styled from "styled-components";
const StBox = styled.div`
width: 100px;
height: 100px;
border: 1px solid ${(props) => props.$borderColor};
margin: 20px;
`;
function App() {
return (
<>
<StBox $borderColor={boxColor}>
박스
</StBox>
</>
);
}
이후 확인해 본 결과 오류가 사라진 것을 확인할 수 있었습니다.

DOM에도 bordercolor
속성이 렌더링 되지 않는 걸 확인할 수 있습니다.


어려웠던 점 ❓
React는 <div> 태그에 유효한 HTML 속성이 아닌 borderColor
와 같은 비표준 속성이 첨부되면 경고한다는 내용에 대해서 이해하기 살짝 어려웠던 것 같습니다.
깨달은 점 ❕
Attribute와 Property의 차이
표준과 비표준 속성에 대해 검색해 보면서 Attribute와 Property 차이에 대해 알게 되었습니다.
둘은 html 요소에 대한 속성을 가리키지만,
속성(Attribute)
은 HTML 안에서 쓰이는 엘리먼트의 추가적인 정보를 의미(HTML 문서 내에 있기에 정적)
프로퍼티(Property)
는 DOM 객체 내부의 속성을 의미(DOM객체는 js로 다루기 때문에 동적)
✨비표준 속성의 충돌을 방지하기 위한 방법✨
❗data-* 속성
사용하기
html에 data-를 붙여 개발자설정속성(=비표준속성)으로 안전하게 사용이 가능하고 data-로 시작하는 속성 전체는 개발자가 용도에 맞게 사용하도록 별도로 예약이 되고, dataset이라는 프로퍼티에 저장되어 DOM을 이용해 접근이 가능하게 됩니다.
transient props
이번에 적용한 방식은 비표준 속성 오류를 transient props
방식을 이용해 해결을 했고 destructure props
방식, data-*
속성을 이용해 해결할 수 있다는 점에 대해 알게 되었습니다.
❗자세한 내용은 아래 링크 확인
styled-components: FAQs
Commonly asked questions about styled-components
styled-components.com

출처 🏷️
'공부 > 트러블 슈팅' 카테고리의 다른 글
[트러블 슈팅] 카카오맵 API를 활용한 캠핑장 데이터 렌더링 최적화 (0) | 2024.09.19 |
---|---|
[트러블 슈팅] SVG 컴포넌트 재사용 시 발생한 이미지 중복 문제 해결하기 (0) | 2024.09.15 |
[트러블 슈팅] MBTI 테스트 (Glitch에서 JSON-server의 응답 속도 차이) (1) | 2024.09.11 |
[트러블 슈팅] 방콕 스타일 (새로고침 시 좋아요 랜덤 활성화 이슈) (1) | 2024.09.02 |
[트러블 슈팅] 방콕 스타일 (supabase RLS 오류) (0) | 2024.09.02 |
[트러블 슈팅] 포켓몬 도감 (svg, router, 이벤트 버블링) (0) | 2024.08.26 |
[트러블 슈팅] 커스텀 훅의 업데이트가 반영되지 않을 때 (0) | 2024.08.13 |
[트러블 슈팅] 영화 검색 사이트 (TypeError, 애니메이션, 이미지 로딩) (0) | 2024.08.05 |