개발 공부한 내용 정리/React
React- styled-components
프로그램 탐험가
2020. 10. 8. 22:28
※ 강의를 듣고 제가 이해한 내용을 바탕으로 정리한 것이라서 오류가 있을 수 있습니다.
styled-components
styled-components는 CSS in JS 기술을 사용하는 라이브러리인데 그중 가장 인기가 있는 라이브러리 이다.
여기서 CSS in JS는 문구가 뜻하는 그대로 JS 안에 CSS 를 작성하는 것을 의미 한다.
1. Tagged Template Literal
const StyledDiv = styled.div`
background: skyblue;
`;
styled-components는 코드를 작성할 때 위 코드와 같이 `을 활용한 Tagged Template Literal을 사용한다.
즉 스타일을 정의하는 속성과 값을 `으로 감싸주면 된다.
2. 설치
npm add styled-components 명령어로 설치해주면 된다.
3. styled-components 사용
App.js
import React from 'react';
import styled from 'styled-components';
const Circle = styled.div` /* div를 아래 코드로 스타일링함과 동시에 해당 스타일을 가진 Circle 컴포넌트를 만듦 */
width: 5rem;
height: 5rem;
background: blue;
border-radius: 50%;
`;
function App() {
return <Circle />;
}
export default App;
styled-components 를 사용하면 이렇게 스타일을 입력함과 동시에 해당 스타일을 가진 컴포넌트를 만들 수 있다. 만약에 div 를 스타일링 하고 싶으면 styled.div, input 을 스타일링 하고 싶으면 styled.input 이런식으로 사용하면 된다.
실행 결과
4. styled-components에 props 사용
App.js
import React from 'react';
import styled from 'styled-components';
const Circle = styled.div`
width: 5rem;
height: 5rem;
background: ${props => props.color || 'blue'}; // props는 이렇게 템플릿 리터럴으로 받아오면 된다.
border-radius: 50%;
`;
function App() {
return <Circle color="red" />;
}
export default App;
위 코드에서 props로 red값을 줬기에 화면에는 빨간색 원이 나타나게 된다.
( props를 주지 않으면 파란색 )
실행 결과
5. 여러줄의 CSS 코드 조건부로 보여주기
import React from 'react';
import styled, { css } from 'styled-components'; // 조건부로 CSS를 여러개 선언하고 싶으면 이렇게 CSS를 불러와 줘야한다.
const Circle = styled.div` // 원을 만드는 styled-components
width: 5rem;
height: 5rem;
background: ${props => props.color}; // 배경색을 props로 받아옴
border-radius: 50%;
${props => // 크기 props
props.huge &&
css` // huge props가 전달 되면 조건부로 아래의 CSS 코드 사용
width: 10rem;
height: 10rem;
`}
`;
function App() {
return (
<>
<Circle color="blue" />
<Circle color="red" huge />
</>
);
}
export default App;
이런식으로 여러 줄의 CSS 코드를 조건부로 보여주고 싶다면 css 를 사용해야한다. css 를 불러와서 사용을 해야 그 스타일 내부에서도 다른 props 를 조회 할 수 있다.