Front/React.js
[React] ๋ฆฌ์กํธ styled-components
ddo04
2024. 8. 20. 15:21
728x90
15. ๋ฆฌ์กํธ styled-components
๐คฏ ๋ฆฌ์กํธ styled-components ์ค์น
- ๋ช ๋ น์ด๋ฅผ ํตํ์ฌ ์ต์ ๋ฒ์ ์ ๋ฆฌ์กํธ style-components ์ค์น
# npm์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
npm install --save styled-components
# yarn์ใน ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
yarn add styled-components
- ์คํ์ผ์ด ์ ์ ์ฉ๋์๋ค๋ฉด ํ์ ๋ฐฐ๊ฒฝ์ ํฐ์ ๊ธ์จ๋ก ์๋ ๋ฆฌ์กํธ๋ผ๋ ๋ฌธ์์ด์ ์ถ๋ ฅํ๋ ์ปดํฌ๋ํธ๊ฐ ์ ์๋ํ๋ฉด ์ด๋ฌํ ํ๋ฉด์ด ๋ฑ์ฅ
- ๋ฆฌ์กํธ styled-components์ MainPage.jsx ํ์ผ์ ์์ฑํ์ฌ ์ฝ๋๋ฅผ ์์ฑํ ํ ๊ผญ index.js ํ์ผ์์ Mainpage๋ฅผ import ํด์ฃผ์ด์ผ npm ์คํ ๋ช ๋ น์ด์ธ npm start ์์ฑ์ ์คํ ๊ฐ๋ฅ
๐คฏ ๋ฆฌ์กํธ styled-components ์ฌ์ฉ
- ์คํ์ผ๋ ์ปดํฌ๋ํธ (styled-components) ๋ ํ๊ทธ๋ ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด(tagged template literal)์ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ์์์ ์คํ์ผ์ ์ง์
- ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ ๊ณตํ๋ ๋ฌธ๋ฒ ์ค ํ๋
import React from "react";
import styled from "styled-components";
const Wrapper = styled.div`
padding: 1em;
background: grey;
`;
- Styled ์ปดํฌ๋ํธ๋ ํ๊ทธ๋ ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ์ฌ CSS ์์ฑ์ด ์ ์ฉ๋ React ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์ด์ค
- Styled ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์ ๋ฐฑํฑ(``)์ผ๋ก ๋๋ฌ์ธ์ธ ๋ฌธ์์ด ๋ถ๋ถ์ CSS ์์ฑ์ ๋ฃ๊ณ ํ๊ทธํจ์ ์์น์๋ styled.html ํ๊ทธ ํํ๋ก ์ฌ์ฉ
- ํด๋น ์๋ฆฌ๋จผํธ ํ๊ทธ์ CSS ์์ฑ๋ค์ด ์ ์ฉ๋ ํํ์ React ์ปดํฌ๋ํธ๊ฐ ๋ง๋ค์ด์ง
๐คฏ ๋ฆฌ์กํธ styled-components์ props ์ฌ์ฉ
- styled ์ปดํฌ๋ํธ์์๋ ์กฐ๊ฑด์ด๋ ๋์ ์ผ๋ก ๋ณํ๋ ๊ฐ์ ์คํ์ผ๋งํ๊ธฐ ์ํด props ๊ธฐ๋ฅ์ ์ ๊ณตํจ
- ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ props์ ๊ฐ์ ๊ฐ๋ ์ผ๋ก ์ดํดํ๋ฉด ๋จ
- styled ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ๋ถ๋ถ์ css ์์ฑ์ ๋ณด๋ฉด ๋ด๋ถ์ props๊ฐ ์ฌ์ฉ๋ ๊ฒ์ ์ ์ ์์
- props๋ ํด๋น ์ปดํฌ๋ํธ์ ์ฌ์ฉ๋ props๋ฅผ ์๋ฏธ
- ์ค์ ๋ฒํผ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ๋ถ๋ถ์ ์ฝ๋๋ฅผ ๋ณด๋ฉด props๋ก dark๋ฅผ ๋ฃ์ด์ฃผ๋ ๊ฒ์ ๋ณผ ์ ์์
- ์ค์ ๋ฒํผ ์ปดํฌ๋ํธ์ ๋ค์ด๊ฐ props๋ ๊ทธ๋๋ก styled ์ปดํฌ๋ํธ๋ก ์ ๋ฌ
- styled ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ํ ์คํ์ผ์ ์์ ์์ฌ๋ก ๊ตฌํํ ์ ์์
๐คฏ ๋ฆฌ์กํธ styled-components์ ์คํ์ผ ํ์ฅํ๊ธฐ
- styled ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ฉด React ์ปดํฌ๋ํธ๊ฐ ์์ฑ๋จ
- ์์ฑ๋ ์ปดํฌ๋ํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ถ๊ฐ์ ์ธ ์คํ์ผ์ ์ ์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ์๋ styled ์ปดํฌ๋ํธ์ ์คํ์ผ ํ์ฅ ๊ธฐ๋ฅ ์ฌ์ฉ
- ๋ฒํผ ์ปดํฌ๋ํธ๋ HTML์ ๋ฒํผ ํ๊ทธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง ๋จ์ํ ๋ฒํผ
- ๋ผ์ด๋๋ ๋ฒํผ ์ปดํฌ๋ํธ๋ HTML ํ๊ทธ๊ฐ ๋น ์ ธ ์๊ณ ๋ฒํผ ์ปดํฌ๋ํธ๊ฐ ๊ดํธ๋ก ๋๋ฌ์ธ์ธ ์ฑ๋ก ๋ค์ด๊ฐ ์๋ ๊ฒ์ ๋ณผ ์ ์์
- HTML ํ๊ทธ๊ฐ ๋น ์ ธ ์๊ณ ๋ฒํผ ์ปดํฌ๋ํธ๊ฐ ๊ดํธ๋ก ๋๋ฌ์ธ์ธ ์ฑ๋ก ๋ค์ด๊ฐ ์๋ ์คํ์ผ์ด ๋ค๋ฅธ ์ปดํฌ๋ํธ์ ์คํ์ผ์ ํ์ฅํด์ ์ฌ์ฉํ๋๋ถ๋ถ
- ๋ผ์ด๋๋ ๋ฒํผ ์ปดํฌ๋ํธ๋ ๋ฒํผ ์ปดํฌ๋ํธ์ ๋ชจ์๋ฆฌ๋ฅผ ๋ฅ๊ธ๊ฒ ๋ง๋ ์ปดํฌ๋ํธ
- ๋ ๋ค์ํ ํํ๋ก ํ์ฅํ ์ ์์
๐คฏ ๋ฆฌ์กํธ ๋ฆฌํฐ๋ด(literal)
- ๋ฆฌํฐ๋ด์ ์์ค ์ฝ๋์ ๊ณ ์ ๋ ๊ฐ์ ์๋ฏธ
- ์์์ ๋์ ๋ค๋ฅธ ๊ฐ๋
let number = 20;
- ๋์ ์ฐ์ฐ์์ ์ผ์ชฝ์๋ number๋ผ๋ ์ด๋ฆ์ ๋ณ์๊ฐ ๋ฑ์ฅํ๊ณ ์ค๋ฅธ์ชฝ์๋ ์ ์ 20์ด ๋ฑ์ฅ
- ์ ์ 20์ number๋ผ๋ ๋ณ์๋ฅผ ๊ฐ์ง ์์ค ์ฝ๋์ ๊ณ ์ ๋ ๊ฐ์ ์๋ฏธ
// ์ ์ ๋ฆฌํฐ๋ด (Integer literal)
const myNumber = 10;
// ๋ฌธ์์ด ๋ฆฌํฐ๋ด (String literal)
const myStr = "Hello";
// ๋ฐฐ์ด ๋ฆฌํฐ๋ด (Array literal)
const myArray = [];
// ๊ฐ์ฒด ๋ฆฌํฐ๋ด (Object literal)
const myObject = {};
- ์ฌ๋ฌ ์ข ๋ฅ์ ๋ฆฌํฐ๋ด์ด ๋์ ์์
- ๋ณ์๋ฅผ ์ ์ธํ ๋ var๋ let์ ์ฌ์ฉํ์ง ์๊ณ ์์๋ฅผ ์๋ฏธํ๋ ์ปจ์คํด์ค(const)๋ฅผ ์ฌ์ฉ
- ์ปจ์คํด์ค๋ฅผ ์ ์ธํ๊ฒ ๋๋ฉด ํด๋น ๋ณ์๋ค์ด ๋ชจ๋ ์์๊ฐ ๋จ
- ์์๋ ๋ณํ์ง ์๋ ์๋ฅผ ์๋ฏธํ๊ณ ํ ๋ฒ ์ ์ธ๋ ์ดํ์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์
- ๋์ ์ฐ์ฐ์์ ์ค๋ฅธ์ชฝ์ ์๋ ๊ฐ๋ค์ด ๋ชจ๋ ๋ฆฌํฐ๋ด์ด ๋จ
๐คฏ ๋ฆฌ์กํธ ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด(template literal)
- ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด์ ๋ฆฌํฐ๋ด์ ํ ํ๋ฆฟ ํํ๋ก ์ฌ์ฉํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ
- ์ญ๋ฐ์ดํ(` `)๋ผ๊ณ ๋ถ๋ฅด๋ ๋ฐฑํฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด์ ์์ฑํ๊ณ ๊ทธ ์์ ๋์ฒด ๊ฐ๋ฅํ ์ต์คํ๋ ์ ์ ๋ฃ๋ ๋ฐฉ๋ฒ
- ์ต์คํ๋ ์ ์ ๋์ฒด๋ผ๋ ๋ป์ ๊ฐ์ง Substitution๋ผ๊ณ ๋ถ๋ฆ
// Untagged template literal
// ๋จ์ํ ๋ฌธ์์ด
`string text`
// ์ฌ๋ฌ ์ค(Multi-line)์ ๊ฑธ์น ๋ฌธ์์ด
`string text line 1
string text line 2`
// ๋์ฒด ๊ฐ๋ฅํ expression์ด ๋ค์ด์๋ ๋ฌธ์์ด
`string text ${expression} string text`
// Tagged template literal
// myFunction์ ํ๋ผ๋ฏธํฐ๋ก expression์ผ๋ก ๊ตฌ๋ถ๋ ๋ฌธ์์ด ๋ฐฐ์ด๊ณผ expression์ด ์์๋๋ก ๋ค์ด๊ฐ ํํ๋ก ํธ์ถ๋จ
myFunction `string text ${expression} string text`;
- UntaggedTemplateLiteral์ ๋ณดํต ๋ฌธ์์ด์ ์ฌ๋ฌ ์ค์ ๊ฑธ์ณ์ ์์ฑํ๊ฑฐ๋, ํฌ๋ฉํ ์ ํ๊ธฐ ์ํด ์ฌ์ฉ
- ํ๊ทธ๋ ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด (TaggedTemplateLiteral)์ ์์ ๋์ ์๋ ํ๊ทธ ํ์ ์ ํธ์ถํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํด
- ํ๊ทธ ํ์ ์ ํ๋ผ๋ฏธํฐ๋ ์ต์คํ๋ ์ ์ผ๋ก ๊ตฌ๋ถ๋ ๋ฌธ์์ด ๋ฐฐ์ด๊ณผ ์ต์คํ๋ ์ ์ด ์์๋๋ก ๋ค์ด๊ฐ๊ฒ ๋จ
- myTagFunction์ด๋ผ๋ ์ด๋ฆ์ ํ๊ทธ ํ์ ์ ํ๋ผ๋ฏธํฐ์ ์ต์คํ๋ ์ ์ด ๊ฐ๊ฐ ์ด๋ป๊ฒ ๋ค์ด๊ฐ๋์ง ์ฝ๊ฒ ํ์
- ํ๊ทธ๋ ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ๋ฉด ๋ฌธ์์ด๊ณผ ์ต์คํ๋ ์ ์ ํ๊ทธ ํ์ ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฃ์ด ํธ์ถํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๊ฒ ๋จ
๊ณต๋ถํ ์๋ฃ
https://www.inflearn.com/course/%EC%B2%98%EC%9D%8C-%EB%A7%8C%EB%82%9C-%EB%A6%AC%EC%95%A1%ED%8A% B8/dashboard
[์ง๊ธ ๋ฌด๋ฃ] ์ฒ์ ๋ง๋ ๋ฆฌ์กํธ(React) ๊ฐ์ | Inje Lee (์ํ) - ์ธํ๋ฐ
Inje Lee (์ํ) | ์๋ฐ์คํฌ๋ฆฝํธ์ CSS ๊ธฐ์ด ๋ฌธ๋ฒ๊ณผ ํจ๊ป ๋ฆฌ์กํธ์ ๊ธฐ์ด๋ฅผ ํํํ๊ฒ ๋ค์ง ์ ์์ต๋๋ค., ๊น๋ํ ๊ฐ์์๋ฃ, ๊ผผ๊ผผํ ์ค๋ช ์ผ๋ก์ฝ๊ฒ ๋ฐฐ์ฐ๋ ๋ฆฌ์กํธ ๊ฐ์์ ๋๋ค. ๐จ๐ซ ๋ฆฌ์กํธ์ ์ธ๊ณ๋ก
www.inflearn.com