2024 11 28
2024-11-28¶
Styled Components¶
- 개요
- 아래와 같이 reactRef를 ref에 두고 하위에 shadowDom을 깔았는데, 여기서 reactRef의 height를 계산을 못했음
- 계속 height를 잘 계산했다가 계속 0이였다가 반복... shadowDom을 하위로 쓰다보니 그런 것 같아서 찾아봄
- ShadowDom
- ShadowDOM을 쓰게되면, 별도의 DOM 트리를 쓰게 된다. 이는 기존 메인 도큐먼트와 분리를 시켜버리는 역할을 함.
- 이런 분리는 height/width 등의 속성 계산에 애를 먹임
1. DOM Isolation
- ShadowDOM은 분리/캡슐화된 DOM 트리를 만듦
- 이는 ShadowDOM 안에서의 hieght를 ShadowDOM 밖에서 재려고 할때 오류가 날 수 있음. 2. Style Encapsulation 3. Layout Calculations
- 브라우저는 ShadowDOM을 별도의 레이아웃 컨텍스트로 취급함
- 이는 정확한 측정에 어려움을 줄 것
-
해결책 Styled Components https://www.daleseo.com/react-styled-components/
- [CCS in JS]
- 스타일 정의를 CSS가 아닌 JS로 작성된 컴포넌트에 바로 삽입하는 것
-
[문법]
styled함수를 임포트하여 원하는 스타일 적용
- 이런식으로 Styled Components를 사용해 JS 코드안에 삽입된 CSS 코드는 글로벌 네임스페이스 사용 X
- 각 JS마다 고유한 CSS 네임 스페이스를 부여하여 각 리액트 컴포넌트에 완전히 격리된 스타일 적용 가능
- 해당 컴포넌트를 쓰는 페이지에 접속했을 때
<style>시트가 도입됨 - props 처럼 특정 속성을 넘겨서 가변 영역으로 쓸 수 있음
- [CCS in JS]
-
- [장점]
- 지역 스코프 스타일
- Co-location: 관련된 스타일을 JS/CSS 한곳에 모을 수 있다.
- 자바스크립트 변수 style에 사용 가능
- [단점]
- 런타임 오버헤드 더함 : 렌더링시 도큐먼트에 삽입할 수 있는 일반 CSS로 스타일 직렬화
- 번들 크기 늘림 : 라이브러리 사이즈 만큼
- [못난점]
- CSS 규칙 자주 삽입하면 브라우저에서 더 많은 추가 작업 수행 필요
- SSR/컴포너트 라이브러리 사용시 잘못될 가능성이 올라감 (SSR에 취약함)
- [장점]