[패스트캠퍼스] 프론트엔드 강의 정리

[패스트캠퍼스] 프론트엔드 강의 #26

Unsung 2022. 11. 10. 10:52

React와 Redux 만들기

  • 개발자가 직접 DOM을 핸들링 하지 않게 함
  • DOM이 없는 것처럼~

아주 흔한 컨셉(아이디어)

  • 다루기 까다롭다면, 다루기 쉬운 포맷으로 변환해 다루기
  • HTML(문자열) ⏩변환⏩ 객체
  • 복잡한 DOM 객체 ⏩변환⏩ 더 간단한 객체!

객체 to DOM Render

<body>
    <div id="root"></div>
</body>
function createDOM(node){
  if(typeof node === "string") {
    return document.createTextNode(node);
  }
  const element = document.createElement(node.tag);
  
  node.children
    .map(createDOM)
    .forEach(element.appendChild.bind(element));
  return element;
}

const vdom = {
  tag: "p",
  props: {},
  children: [
    {
      tag: "h1",
      props: {},
      children: ["React 만들기"],
    },
    {
      tag: "ul",
      props: {},
      children: [
        {
          tag: "li",
          props: {},
          children: ["1번째 아이템"]
        },
        {
          tag: "li",
          props: {},
          children: ["2번째 아이템"]
        },
        {
          tag: "li",
          props: {},
          children: ["3번째 아이템"]
        },
      ]
    }
  ],
};

document
  .querySelector("#root")
  .appendChild(createDOM(vdom));

Webpack과 Babel 세팅

npm i webpack-cli -D

npm i

webpack-dev-server

babel-loader

@babel/core

@babel/preset-env

@babel/preset-react

html-webpack-plugin

-D-

webpack.config.js (node 문법)

웹팩의 모듈과 플러그인

웹팩이 하는 일

entry(입력)의 JS를 받아 읽어들이고, 변환과정을 걸쳐 그 변환과정을 출력한다.

그 변환과정은? 웹팩이 하는 것이 아니라

웹팩에 끌어들인 다른 프로그램(plugin)이 처리 후,

웹팩은 그것들을 모아서 출력한다 ⏩ 번들링 프로세스

예시

  1. entry에 JS 파일을 지정함
  2. module에 파일을 변환하는 트랜스파일러 지정
  3. plugin에 변환된 파일을 변경하는 기능을 가진 소프트웨어를 지정
  4. 웹팩은 위의 순서대로 처리 후

최종적으로 output 파일로 쓴다.

const vdom = {
  tag: "p",
  props: {},
  children: [
    {
      tag: "h1",
      props: {},
      children: ["React 만들기"],
    },
    {
      tag: "ul",
      props: {},
      children: [
        {
          tag: "li",
          props: {
            style: "color:blue",
          },
          children: ["1번째 아이템"]
        },
        {
          tag: "li",
          props: {
            style: "color:green",
          },
          children: ["2번째 아이템"]
        },
        {
          tag: "li",
          props: {
            style: "color:red",
          },
          children: ["3번째 아이템"]
        },
      ]
    }
  ],
};

createElement

가변 인자 처리

import { createDOM, createElement, render } from "./react";

const vdom = createElement("p", {},
  createElement("h1", {}, "React 만들기"),
  createElement("ul", {},
    createElement("li", { style: "color:blue" }, "1번째 아이템"),
    createElement("li", { style: "color:green" }, "2번째 아이템"),
    createElement("li", { style: "color:red" }, "3번째 아이템"),
  )
);

console.log(vdom);

render(vdom, document.querySelector("#root"));

createElement 숨기기

HTML의 태그 형태로

@JSX

/* @jsx createElement */

import { createDOM, createElement, render } from "./react";

const vdom = <p>
  <h1>React 만들기</h1>
  <ul>
    <li style="color:blue">1번째 아이템</li>
    <li style="color:green">2번째 아이템</li>
    <li style="color:red">3번째 아이템</li>
  </ul>
</p>

console.log(vdom);

render(vdom, document.querySelector("#root"));

Babel · The compiler for next generation JavaScript

함수 컴포넌트

컴포넌트 : JSX로 만들어진 형태

사용자 컴포넌트

  • 함수
  • 클래스

✅ 대문자로 시작하는 것은 함수라고 약속함!

클래스 컴포넌트

거의 안씀..

Hook을 통해 함수 컴포넌트도 state를 가질 수 있게 되면서

함수 컴포넌트가 대세가 되었다

virtual DOM

메타데이터

UI 업데이트 될때 : render 메소드가 새로워 진다

비교를 통해 새로운 걸 반영

Hook

함수가 상태를 가질 수 있다.

  • 반복문, 조건문, 중첩함수 내에서 호출할 수 없다.
  • React 함수 내에서만 호출해야 한다.
  • React는 Hook이 호출되는 순서에 의존한다

Redux

상태를 관리하는 라이브러리

 

[내일배움카드취업], [국비지원교육]