Tagged Template 기능

// (1) 보통 일반적인 방법
const userName = 'kim heetae';
const bolder = text => `<b>${text}</b>`;

console.log(`Hi~ ${userName}`);
console.log(`Hi~ ${bolder(userName)}`);
// (2) Tagged Template

// strings : ${} 를 기준으로 생성한 문자열의 배열이다. 예를들면 split(${})
// ...fns : ${} 의 요소들을 말한다.
function div(strings, ...fns) { // (문자열 배열, 배열의 ${}배열요소들)
  const flat = s => s.split('\\n').join('');

  return function (props) {
    return `<div style="${flat(strings[0]) + (fns[0] && fns[0](props)) + flat(strings[1])}"></div>`;
  }
}

const Div = div` 
  font-size: 20px;
  color: ${props => props.active ? 'white' : 'gray'};
  border: none;
`; // div() 함수의 반환 값을 Div에 할당

console.log(Div({ active: true }));