λ°˜μ‘ν˜•

λ‹€ κΉŒλ¨Ήμ–΄λ²„λ¦° μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό λ‹€μ‹œ λ³΅κΈ°μ‹œν‚€κΈ° μœ„ν•΄ μ‹œμž‘ν•œ νˆ¬λ‘ 리슀트 λ§Œλ“€κΈ°!

λ§Œλ“€λ‹€ λ³΄λ‹ˆ μžλ°”μŠ€ν¬λ¦½νŠΈ 처음 배울 λ•Œ μ¨λ‚΄λ €κ°”λ˜ μ½”λ“œμ™€ λ³„λ°˜ 차이가 μ—†λ‹€..

 

μ²˜μŒμ΄λž‘ λ˜‘κ°™μ΄ μž‘μ„±ν•˜λ©΄ λ‹¨μˆœ 볡슡 λ‹¨μˆœ 노가닀일뿐..!!!!

뭐라도 λ°œμ „λœκ²Œ μžˆμ–΄μ•Ό ν•˜μ§€ μ•Šμ„κΉŒ.......???????????λž€ 생각에

 

λ°˜λ³΅λ˜λŠ” μ½”λ“œλ₯Ό μ€„μ—¬λ³΄κΈ°λ‘œ ν–ˆλ‹€!


πŸ‘» 이전 μ½”λ“œ

μ „μ—λŠ” λƒ…λ‹€ ν•„μš”ν•œ μš”μ†Œλ“€ λŠμž„μ—†μ΄ 생성 ν›„

      const wrapper = document.createElement("div");
      const header = document.createElement("header");
      const inputContainer = document.createElement("div");
      const todoContainer = document.createElement("div");

 

λƒ…λ‹€ 뢙여버리기..

      document.body.appendChild(wrapper);
      wrapper.appendChild(header);
      wrapper.appendChild(inputContainer);
      wrapper.appendChild(todoContainer);

 

λΆ€λͺ¨μš”μ†Œ 생성, μžμ‹μš”μ†Œ 생성, μžμ‹μš”μ†Œ λΆ€λͺ¨μš”μ†Œμ— 뢙이기..

자꾸 λŠ˜μ–΄λ§Œ κ°€λŠ” createElement, appendChild......지긋지긋햐..


✨ λ¦¬νŒ©ν† λ§

function createElement({
  tagName,
  properties,
  parent,
  children,
  count = 1,
}) {
  function create() {
    const element = document.createElement(tagName);  // νƒœκ·Έ 생성
    Object.assign(element, properties);               // 속성 ν• λ‹Ή
    parent?.appendChild(element);                     // λΆ€λͺ¨μ— μΆ”κ°€

    // μžμ‹ μš”μ†Œκ°€ μžˆμ„ 경우 μž¬κ·€μ μœΌλ‘œ μžμ‹ 생성
    children?.map((child) => {
      child.parent = element;   // ν˜„μž¬ μƒμ„±λœ μš”μ†Œλ₯Ό λΆ€λͺ¨λ‘œ μ„€μ •
      createElement(child);     // μžμ‹ μš”μ†Œλ₯Ό μœ„ν•œ createElement μž¬κ·€ 호좜
    });

    return element;
  }

  if (count > 1) {
    const results = [];
    for (let i = 0; i < count; i++) {
      results.push(create());
    }
    return results;
  } else {
    return create();
  }
}
  • createElement와 appendChildλ₯Ό μž¬μ‚¬μš© κ°€λŠ₯ν•œ createElement ν•¨μˆ˜λ‘œ λ³€κ²½ν•˜μ—¬ λ°˜λ³΅λ˜λŠ” μ½”λ“œλ₯Ό μ œκ±°ν•˜μ˜€λ‹€.
  • createElement ν•¨μˆ˜λŠ” μ—¬λŸ¬ μš”μ†Œλ₯Ό ν•œ λ²ˆμ— 생성할 수 μžˆλ„λ‘ count νŒŒλΌλ―Έν„°λ₯Ό μΆ”κ°€ν•˜μ˜€λ‹€. 이λ₯Ό 톡해 μ—¬λŸ¬ μš”μ†Œλ₯Ό λ™μ μœΌλ‘œ μ‰½κ²Œ μΆ”κ°€ν•  수 있게 λ˜μ—ˆλ‹€.
  • λΆ€λͺ¨-μžμ‹ κ΄€κ³„μ˜ DOM ꡬ쑰λ₯Ό μ‰½κ²Œ λ§Œλ“€κΈ° μœ„ν•΄ children νŒŒλΌλ―Έν„°μ™€ μž¬κ·€ ν˜ΈμΆœμ„ μ‚¬μš©ν–ˆλ‹€. 이둜써 λΆ€λͺ¨ μš”μ†Œκ°€ μžμ‹ μš”μ†Œλ₯Ό κ°–λŠ” λ³΅μž‘ν•œ DOM νŠΈλ¦¬λ„ κ°„λ‹¨ν•˜κ²Œ ꡬ성할 수 μžˆλ‹€.
  • Object.assign을 μ‚¬μš©ν•˜μ—¬ μš”μ†Œμ— 속성듀을 μœ μ—°ν•˜κ²Œ ν• λ‹Ήν•  수 μžˆλ„λ‘ ν•˜μ˜€λ‹€. 이λ₯Ό 톡해 μ—¬λŸ¬ 속성을 ν•œ λ²ˆμ— μ„€μ •ν•  수 있고, 좔가적인 속성이 생기더라도 ν•¨μˆ˜ μˆ˜μ • 없이 μ²˜λ¦¬ν•  수 μžˆλ‹€.
Object.assign()은 객체의 속성듀을 λ‹€λ₯Έ 객체에 λ³΅μ‚¬ν•˜λŠ” 역할을 ν•œλ‹€.
μ—¬κΈ°μ„œλŠ” properties 객체의 속성듀을 μƒμ„±λœ νƒœκ·Έ(element)에 λ³΅μ‚¬ν•˜μ—¬, νƒœκ·Έμ˜ 속성을 μ„€μ •ν•œλ‹€.

 

 

✨ λ¦¬νŒ©ν† λ§ν•œ createElement μ‚¬μš©ν•˜κΈ°

children μš”μ†Œκ°€ λŠμž„ 없이 생겨 λ¬΄ν•œ λ“€μ—¬μ“°κΈ°κ°€ λ°œμƒ..

가독성을 μœ„ν•΄ header, inputContainer, itemContainer의 큰 λ©μ–΄λ¦¬λ‘œ λ‚˜λˆ„μ–΄μ„œ μƒμ„±ν•΄μ£Όμ—ˆλ‹€.

      const app = createElement({
        tagName: "div",
        properties: { id: "app" },
        parent: document.body,
      });

      const header = createElement({
        tagName: "header",
        properties: { id: "header" },
        parent: app,
        children: [
          {
            tagName: "div",
            properties: { className: "counter" },
            children: [
              {
                tagName: "span",
                properties: { textContent: "total" },
              },
              {
                tagName: "span",
                properties: { textContent: "0" },
              },
              {
                tagName: "span",
                properties: { textContent: "completed" },
              },
              {
                tagName: "span",
                properties: { textContent: "0" },
              },
            ],
          },
          {
            tagName: "h1",
            properties: { textContent: "T🌞 D🎯 LIST", className: "title" },
          },

          {
            tagName: "span",
            properties: { textContent: "ν•  일을 κΈ°λ‘ν•˜μ„Έμš”πŸŒ±" },
          },
        ],
      });
      
      // 이후 μƒλž΅..

 


참고🧐

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

 

Object.assign() - JavaScript | MDN

Object.assign() λ©”μ„œλ“œλŠ” 좜처 κ°μ²΄λ“€μ˜ λͺ¨λ“  μ—΄κ±° κ°€λŠ₯ν•œ 자체 속성을 볡사해 λŒ€μƒ 객체에 λΆ™μ—¬λ„£μŠ΅λ‹ˆλ‹€. κ·Έ ν›„ λŒ€μƒ 객체λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

developer.mozilla.org

 

λ°˜μ‘ν˜•

+ Recent posts