์ค๋์ Styled-component๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ Js ๋ฌธ๋ฒ์ธ Template Literal์ ๋ํด์ ๊ฐ๋ณ๊ฒ ์์๋ณด๊ณ ๋์ด๊ฐ ๊ฒ์ด๋ค.
Template Literal
ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด์ ๋ด์ฅ๋ ํํ์์ ํ์ฉํ๋ ๋ฌธ์์ด ๋ฆฌํฐ๋ด์ด๋ค.
์ฌ๊ธฐ์ ๋ฌธ์์ด ๋ฆฌํฐ๋ด์ ๋ฌด์์ด๋?
๊ธฐ๋ณธ์ ์ฌ์ฉ๋ฒ
์ฌ๊ธฐ์ ๋ฐ์ดํ๋ฅผ ์ฌ์ฉํ๋๋ฐ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ '' ๊ฐ ์๋ ``๋ฅผ ์ฌ์ฉํ๋ค.
์ด๋ ๋ฐ์ดํ๋ผ๊ณ ํ์ง ์๊ณ ๋ฐฑํฑ (grave accent)์ ์ด์ฉํ๋ค.
ํ
ํ๋ฆฟ ๋ฆฌํฐ๋ด์ ${expression}
๋ก ํํํ ์ ์๊ณ , ํํ์๊ณผ ๊ทธ ์ฌ์ด ํ
์คํธ๋ ํจ์๋ก ์ ๋ฌ๋๋ค.
์ผ๋ฐ ๋ฌธ์์ด
const name = "jang";
const message = `welcome ${name}`;
console.log(message);
// "hello jang"
์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค๋ ์๋ฆฌ๋ค.
๊ฐ์ฒด
ํ์ง๋ง ์ด๋ฐ Template Literal์ ${expression}
์ ๋ฌธ์์ด์ด๋ ์ซ์์ ๊ฐ์ ํ์
์ด ์๋ ๊ฐ์ฒด๋ฅผ ๋ฃ์ด๋ ๋์ํ๋ค.
const user = { id: 1, name: "jang", type: "programmer" };
const tl = `${user}`
console.log(tl);
// "[object Object]"
ํจ์
๊ฐ์ฒด๊ฐ ๋ค์ด๊ฐ๋ฉด ํจ์๋ ๋ค์ด๊ฐ์ง ์์๊น?
์ ๋ต์ด๋ค.
const my_func = () => "hello";
const fn = `${my_func}`;
console.log(fn);
// () => "hello"
Taggged Template Literal
Template Literal์ ์ฌ์ฉํ๊ณ ๋ด๋ถ์ js ๊ฐ์ ์กฐํํ ๋๋ Tagged Template Literal์ ์ฌ์ฉํ ์ ์๋ค.
์ฐ๋ฆฌ๊ฐ styled-components๋ฅผ ์ฌ์ฉํ ๋ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐ๋ก tagged template literal์ด๋ค.
๋๋ถ๋ถ์ styled-component ์ฝ๋๋
// styled-components
const Button = styled.button`
border-radius: 50px;
padding: 5px;
min-width: 120px;
color: wheat;
font-weight: 600;
-webkit-appearance: none;
cursor: pointer;
`;
๊ณผ ๊ฐ์ ํ์์ผ๋ก ์ฌ์ฉ๋๋ค.
์ฌ๊ธฐ์ button
์ ํด๋นํ๋ ๊ฒ์ ์ฌ์ค ํจ์์ด๋ค.
์ฌ๊ธฐ์ ํจ์์ ํ๊ทธ๋ฅผ ํจ๊ป ๋ถ์ฌ ์ฌ์ฉํด๋ณด์.
const tag = (...args) => console.log(args);
tag`my name is jang`;
// [["my name is jang"], raw: ["my name is jang"]];
๊ณผ ๊ฐ์ด ์ถ๋ ฅ์ด ๋๋ค.
์ฌ๊ธฐ์ ์ค์ํ ๊ฒ์ ๋ฐฑํฑ์ ์๋ ๋ฌธ์์ด์ด๋ ...args
rest ์ฐ์ฐ์ ๋ํด์๋ ์ ๊ฒฝ์ฐ์ง ๋ง์.
๊ทธ๋ผ ์ค์ํ ๊ฒ์ raw์ธ๋ฐ raw์ ์ฐ๋ฆฌ๊ฐ ๋ฃ์๋ ๋ฌธ์์ด my name... ์ด ์ถ๋ ฅ๋๋ค.
๊ทธ๋ผ ์ ๊ธฐ raw๋ฅผ ์์๋ณด์.
raw
ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด๋ก a, b๋ฅผ ๋ฃ์ด๋ณด์.
const a = 'my';
const b = 'name';
const c = 'is';
const d = 'jang';
tag`${a} ${b} ${c} ${d}`;
// [[' ', ' ', ' ', ' ', rawA: ['my', 'name', 'is', 'jang'], 'my', 'name', 'is', 'jang']
๊ฐ ์ถ๋ ฅ๋๋ค.
์กฐ๊ธ ๋ณต์กํด๋ณด์ด์ง๋ง, ์ฝ๊ฒ ๋ง ํด์ a์ b, c, d๊ฐ ๋ค์ด๊ฐ๋ค๋ ๊ฒ์ด ์๋๋ผ ${}
๊ทธ๋ฃน์ ๊ฐ๋ค์ด ๋ค์ด๊ฐ๋ค๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ Tagged Template Literal์ ๋ํด์ ์์๋ณด์๋๋ฐ, ์ด ๋ฌธ๋ฒ ๊ตฌ์กฐ๋ก styled-components๊ฐ ๋์ํ๋ค๋ ๊ฒ๋ง ์๋ฉด ๋๋ค.
์ด๋ฒ ์๊ฐ์์ ์์๋ณด๊ณ ์ ํ๋ ๊ฒ์ ์ด๋ค ๊ตฌ์กฐ๋ก ๋์ํ๋์ง์ ๋ํด์๋ค.
๋ณธ๊ฒฉ์ ์ผ๋ก styled-components์ ๋ํด์ ์์๋ณด๊ธฐ ์ ์ ๊ฐ๋ณ๊ฒ ๊ตฌ์กฐ์ ๋ํด ์์๋ณด์์ผ๋ ๋ค์ ์๊ฐ์ tag``๊ณผ ๊ฐ์ ๋ฌธ๋ฒ์ด ๋์ค๋๋ผ๋ ๋นํฉํ์ง ๋ง์.
๋๊ธ