React

[React.js] React

sian han 2022. 6. 23. 13:16

※ React 리액트

 

 - 구조가 MVC, MVW 등인 프레임워크와 달리 오직 View만 신경쓰는 라이브러리

 - 리액트 프로젝트에서 특정 부분이 어떻게 생길지 정하는 선언체가 있는데, 이를 컴포넌트라고 함 ( 재사용 가능한 API )

 

 

▶ 렌더링

 - 서버로부터 HTML 파일을 받아 브라우저에 뿌려주는과정

 - 사용자 화면에 뷰를 보여 주는 것을 렌더링이라고 함

 - 컴포넌트는 재사용이 가능한 API로 수많은 기능들을 내장하고 있으며,

    컴포넌트 하나에서 해당 컴포넌트의 생김새와 작동 방식을 정의함

 - 리액트 컴포넌트가 최초로 실행한 '초기 렌더링'

    컴포넌트의 데이터 변경으로 다시 실행되는 '리렌더링' 개념을 이해해야 함

 

 

render 함수

  - 컴포넌트가 어떻게 생겼는지 정의하는 역할

  - 최상위 컴포넌트 ( app )의 렌더링 작업이 끝나면 지니고 있는 정보들을 사용하여 html 마크업을 만들고,

     이를 우리가 정하는 실제 페이지의 DOM 요소 ( root ) 안에 주입 ( 태그를 넣음 ) 함

  - 컴포넌트는 데이터를 업데이트했을 때 업데이트한 값을 수정하는 것이 아니라,

    새로운 데이터를 가지고 render 함수를 또 다시 호출 함

     ( 변경된 값만 변화하는것처럼 보이지만 페이지 전체가 갈아끼워지는것임 )

     => 이때 render함수가 반환하는 결과를 곧바로 DOM에 반영하지 않고,

          이전에 render 함수가 만들었던 컴포넌트 정보와

           현재 render 함수 가 만든 컴포넌트 정보를 비교해서 차이를 알아냄.

     => 둘의 차이를 알아내 최소한의 연산으로 DOM 트리를 업데이트

 

 

Virtual DOM

DOM : 객체로 문서 구조를 표현하는 방법으로 XML 이나 HTML로 작성

(Document Object Model)

  - 리액트는 Virtual DOM 방식을 사용하여 DOM 업데이트를 추상화함으로써

     DOM 처리 횟수를 최소화하고 효율적으로 진행

 

▷ 리액트에서 데이터가 변하여 웹 브라우저에 실제 DOM 을 업데이트할 때의 3가지 절차

 

1) 데이터를 업데이트하면 전체 UI를 Virtual DOM에 리렌더링

2) 이전 Virtual DOM에 있던 내용과 현재 내용을 비교

3) 바뀐 부분만 실제 DOM에 적용

 

 

 

Node.js

  - 리액트 애플리케이션은 웹 브라우저에서 실행되는 코드이므로 Node.js와 직접적인 연관은 없지만,

     프로젝트를 개발하는 데 필 요한 주요 도구들이 Node.js 를 사용하기 때문에 설치하는 것

  - Node.js를 설치하면 Node.js 패키지 매니저 도구인 npm이 설 치됨

 

 

 

 


 

기존의 jsp 가 js 로 바뀐다고 생각하면되고 이들을 컴포넌트라 한다

 

 

App.js

 

  = > 이 컴포넌트에서 return 하는 tag 를

 

 

index.js

- import React from 'react' : 리액트를 불러와서 사용할 수 있게 해줌

 - index에서 불러온 모듈을 모두 합쳐서 하나의 파일을 생성해준다 (번틀링)

 

  = > id 가 root 인 애를 찾아서 app을 렌더링해라

        App 컴포넌트를 아이디가 root 인 엘리먼트에 그린다고 생각하자

 

 

 

index.html

 

  = > 여기 div 로 들어오는거임

 

 


▶ 리액트 동작 원리

 

처음에는 빈 html 이 나오고 app.js 에서 리턴된 값을 채워넣는형식

 

 

 

 

 

 

▶ JSX

 - 자바스크립트인데 HTML 이랑 비슷하게 생김 (자바스크립트 확장문법)

 - 브라우저에서 실행되기 전에 코드 번들링되는 과정에서 바벨을 사 용하여 일반 자바스크립트 형태의 코드로 변환됨

 

[1] 감싸인 요소

리액트 컴포넌트에서 요소 여러 개를 하나의 요소로 감싸야 함 - 컴포넌트 내부는 하나의 DOM 트리 구조로 이루어져야 한다는 규칙이 있기 때문

 

Fragment : div 요소 대신 리액트 v16 이상부터 도입된 Fragment라는 기능을 사용해도 됨

 

 

▷ JSX는 언제 괄호 {} 로 감싸야 하나

 - JSX를 여러 줄로 작성할 때 괄호로 감싸고, 한 줄로 표현할 수 있는 JSX는 감싸지 않는다

 

 꼭 닫아야 하는 태그

 - JSX에서는 태그를 닫지 않으면 오류 발생

 

 

 

 

 

 

[2] 자바스크립트 표현

  - 자바스크립트 표현식을 작성하려면 JSX내부에서 코드를 {}로 감싸 면 됨

function App() {
  const name = '홍길동';
  return (
    <>
    <div>{name} 님 안녕하세요</div>
    </>
  );
}

 

 

 

 

[3] if 문 대신 조건부 연산자

  - JSX 내부의 자바스크립트 표현식에서 if문을 사용할 수 없다

  - JSX 밖에서 if문을 사용하여 사전에 값을 할당하거나, {} 안에 조건 부 연산자(삼항 연산자)를 사용

 

function App() {
  const name = '홍길동';
  return (
    <>
    {
      name ==='홍길동'?(<div>안녕하세요{name}님</div>)
      :(<div>guest님이군요</div>)
    }
    </>
  );
}

name 이 홍길동이면 => 안녕하세요 홍길동님

                                        아니면 => guest 님이군요

 

 

 

 

[4] AND 연산자( && )를 사용한 조건부 렌더링

 

 

[5] undefined를 렌더링하지 않기

  - 리액트 컴포넌트에서는 함수에서 undefined만 반환하여 렌더링하는 상황을 만들면 안됨 (에러는 안남 )

 

 

[6] 인라인 스타일링

  - 리액트에서 DOM 요소에 스타일을 적용할 때는 문자열 형태로 넣는 것이 아니라 객체 형태로 넣어 주어야 함

 

 

 

  - style객체를 미리 선언하지 않고 바로 style 값을 지정하고 싶다면

 

 

 

 

[7] class 대신 className

 

 - App.css 작성

.react {
    background: aqua;
    color: black;
    font
    -size: 48px;
    font
    -weight: bold;
    padding: 16px;
}

 

 - App.js 수정

import './App.css';
function App()
{
    const name='리액트';
    return <div className="react">{name}</div>;
}

 

 

 

 

[8] 주석

 - vscode 단축키 : Ctrl + L

 {/* ... */}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'React' 카테고리의 다른 글

[React] useConext + Context API  (0) 2022.06.30
[React] useRef  (0) 2022.06.28
[React] useState  (0) 2022.06.28
[React] import / export  (0) 2022.06.27
[React] props / state  (0) 2022.06.24