재사용할 수 있는 UI 컴포넌트의 필요성이 대두됨!
컴포넌트 생성 -> 컴포넌트 결합 -> 페이지 조립
그래서 CDD가 등장함
위처럼 CDD를 사용하면
레고처럼 조립해 나갈 수 있는 부품 단위로 UI 컴포넌트를 만들어 나가는 개발을 진행할 수 있음.
=> 구조화된 CSS가 필요하게 된 이유
그리고 등장한 CSS 전처리기(CSS Preprocessor) 란?
CSS 전처리기의 문제를 보완하기 위해 BEM, OOCSS, SMACSS 같은 CSS 방법론이 대두됨.
공통 지향점
문제점
기능적 혹은 상태를 가진 컴포넌트들로부터 UI를 완전히 분리해 사용할 수 있는 아주 단순한 패턴을 제공함.
class, id 이름을 짓느라 고민한 적이 있다.
CSS 파일 안에서 내가 원하는 부분을 찾기 힘들었다.
CSS 파일이 너무 길어져서 파일을 쪼개서 관리해본 적이 있다.
스타일 속성이 겹쳐서 내가 원하는 결과가 나오지 않은 적이 있다
이런 불편함을 CSS를 컴포넌트화 시킴으로써 해결해주는 라이브러리가 Styled Component
Styled Component
Styled Components로 컴포넌트를 사용하는 방법
props도 내려줄 수 있음
전역 스타일도 설정할 수 있음
ex)
import { createGlobalStyle } from "styled-components"; // createGlobalStyle를 불러옴
const GlobalStyle = createGlobalStyle`
button {
padding : 5px;
margin : 2px;
border-radius : 5px;
}
`
function App() {
return (
<>
<GlobalStyle /> // 최상위 컴포넌트에서 사용해주어야 함
<Button>전역 스타일 적용하기</Button>
</>
);
}
React 애플리케이션을 만들 때 DOM을 직접 조작하는 것은 지양해야 한다.
하지만 DOM 엘리먼트의 주소값을 활용해야 하는 경우
- focus
- text selection
- media playback
- 애니메이션 적용
- d3.js, greensock 등 DOM 기반 라이브러리 활용
이렇게 개발을 하다보면 DOM을 직접 건드려야하는 상황이 발생한다.
이럴때 useRef라는 hook함수를 활용
const 주소값을_담는_그릇 = useRef(참조자료형)
// 이제 주소값을_담는_그릇 변수에 어떤 주소값이든 담을 수 있습니다.
return (
<div>
<input ref={주소값을_담는_그릇} type="text" />
{/* React에서 사용 가능한 ref라는 속성에 주소값을_담는_그릇을 값으로 할당하면*/}
{/* 주소값을_담는_그릇 변수에는 input DOM 엘리먼트의 주소가 담깁니다. */}
{/* 향후 다른 컴포넌트에서 input DOM 엘리먼트를 활용할 수 있습니다. */}
</div>);