minghxx.blog
  • [처음 만난 리액트] section 4. Rendering Elements
    2024년 03월 24일 16시 08분 32초에 업로드 된 글입니다.
    작성자: 민발자
    728x90

     

    1. Elements의 정의와 생김새

    📌 Elements란?

    리액트 앱을 구성하는 가장 작은 블록들

    화면에서 보이는 것들을 기술

    🔎 React element와 DOM element의 차이

    실제 브라우저의 DOM에 존재하는 element가 DOM element

    리액트의 virtual DOM에 존재하는 element가 리액트 element

    즉 리액트 element는 DOM element의 가상 표현

    DOM element는 리액트 element에 비해 많은 정보를 가지고 있어 상대적으로 크고 무겁다

    🔎 React element

    const element = <h1>Hello</h1>;

    React.createElement 함수 호출  자바스크립트 객체 생성 = 리액트 element

    리액트는 이 element를 이용해 실제 화면에서 보게 되는 DOM element를 생성

     

    📌 Elements의 생김새

    리액트 element는 자바스크립트 객체 형태로 존재

    컴포넌트 유형과 속성 및 내부의 모든 자식에 대한 정보를 포함하고 있는 일반적인 자바스크립트 객체

    불변성을 가지고 있음

    왼) element 의 자바스크립트 객체 오) 랜더링된 element

    🔎 createElement 파라미터

    type : HTML 태그이름이 문자열로 들어가거나 또 다른 리액트 컴포넌트가 들어감

    props : element의 클래스나 스타일 같은 속성

    children : 자식 element

     

    2. Elements의 특징 및 렌더링하기

    📌 React Element의 특징

    🔎 불변성(Immutable)

    element 생성 후에는 자식이나 속성을 변경할 수 없음

    변경된 element를 보여주기 위에선 기존 element를 변경하는 것이 아닌 새로운 element를 생성

     

    📌 Elements 렌더링 하기

    🔎 Root DOM Node

    <div id="root"></div>

    모든 리액트 element들이 렌더링 되는 루트 돔노드

     

    🔎 렌더링 과정

    const element = <h1>안녕 리액트</h1>;
    ReactDOM.render(element, document.getElementById('root'));

    element를 생성하고 루트 돔 노드에 렌더링 → ReactDOM.render() 사용

    첫 번째 파라미터(리액트 element - virtual DOM에 존재)를 두 번째 파라미터(DOM element)에 렌더링

    렌더링 되는 과정은 virtual DOM에서 실제 DOM으로 이동하는 것

     

    🔎 렌더링 된 Elements를 업데이트하기

    리액트 element의 불변성으로 인해 업데이트하기 위해선 새로 생성해야 함

     

     

    3. 시계 만들기

    📃 Clock.jsx

    import React from 'react';
    
    function Clock(props){
      return(
        <div>
          <h3>안녕 리액트</h3>
          <h5>현재 시간 : {new Date().toLocaleTimeString()}</h5>
        </div>
      );
    }
    
    export default Clock;

     

    📃 index.js

    const root = ReactDOM.createRoot(document.getElementById('root'));
    
    setInterval(() => {
      root.render(
        <React.StrictMode>
          <Clock />
        </React.StrictMode>
      );
    }, 1000);
    
    reportWebVitals();

    1초마다 Clock 컴포넌트를 렌더링

     

    📊 결과

     

     

     

     

     

    728x90
    댓글