๐Ÿ“Œ template literals

ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด์€ ๋‚ด์žฅ๋œ ํ‘œํ˜„์‹์„ ํ—ˆ์šฉํ•˜๋Š” ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์ด๋‹ค.

ํŠน์ง•

  • ` ๋ฐฑํ‹ฑ์ด๋ผ๋Š” ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ${}๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œํ˜„์‹์„ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐœํ–‰์„ ํฌํ•จํ•œ๋‹ค.

tagged templates

ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด์˜ ๋ฐœ์ „๋œ ํ˜•ํƒœ๋กœ ํƒœ๊ทธ๋“œ ํ…œํ”Œ๋ฆฟ์ด ์žˆ๋‹ค.

๋งˆ์น˜ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์ œ 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
const virtualNode = {
name: "figure",
className: "tagged-template-literals",
style: { cssText: "" },
};

const styled = (strings, Node, ...value) => {
const el = strings
.slice(1, 3)
.reduce((acc, cur) => acc + cur.trim(), "")
.split(";");

el.forEach((elem, i) => {
Node.style.cssText += elem + value[i] + ";";
});
return Node;
};

let values = {
margin: "10px",
color: "#d08471",
};

const received = styled`${virtualNode}margin: ${values.margin};color: ${values.color};`;

console.log(received);
  • ๋งˆ์น˜ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ์ธ์ˆ˜๋ฅผ ๋ฐ›์•„์„œ ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด์— ๋„ฃ์–ด ๋ฐ˜ํ™˜๊ฐ’์„ ์›ํ•˜๋Š” ๋Œ€๋กœ ์ง€์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฆฌ์•กํŠธ์˜ StyledComponent๊ฐ€ ํƒœ๊ทธ๋“œ ํ…œํ”Œ๋ฆฟ์„ ํ™œ์šฉํ•˜์—ฌ ํƒ„์ƒํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

๐Ÿ“ ์†Œ๊ฐ

๋ฌธ์žํƒ€์ž…๊ณผ ๋‹ค๋ฅธ ํƒ€์ž…์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ๋•Œ ์›ํ•˜๋Š” ๋ฐ˜ํ™˜๊ฐ’์„ ์ง๊ด€์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ์šฉ์ดํ•ด๋ณด์ธ๋‹ค.