230221 - React (리액트) 기초

728x90

오늘 내가 배운 것

1. 브라우저 렌더링 과정

2. 브라우저 렌더와 React

3. React

4. JSX

5. DOM / React / JSX를 이용한 React 문법 비교

 

1. 브라우저 렌더링 과정

여태까지는 화면을 꾸밀 때 `javascript`를 이용하여 HTML을 조작했다. (DOM)

 

브라우저 렌더링 과정 (응답을 받고 화면에 보이기 직전 시점이다.)

 

HTML을 그릴 때 아래와 같은 과정을 거친다.

1. 응답이 오면, 응답 바디에 있는 HTML 내용을 파싱 한다.
2. 파싱 이후 트리를 만든다.

<!-- example -->
<html>
    <head>
        <title></title>
    </head>
    <body></body>
</html>

3. 표현준비를 한다. (사이즈 정렬... 등등..)
4. Render가 된다.

 

 

 

2. 브라우저 렌더와 React

 DOM을 이용하여 화면을 그리는 과정이 매우 불편하고 귀찮았다.

(엘리먼트를 만들고 innerHTML로 내용을 적고 그 엘리먼트를 다시 원하는 위치에 그려줘야 하기 때문에)
이 불편한 DOM 조작을 조금 더 쉽게 하기 위해서 사용하는 것이 `react` 라이브러리이다.

2-1. React는 누가 만들었는가?

 Meta(FaceBook)에서 만들었다. 새로운 글이 생기면 상단에 생기는 방식..
DOM 조작을 쉽게 할 수 있는 SPA를 만들기 위해서 개발하게 되었다. 하지만 `Class`문법으로 만들어져 있기 때문에, 진입 장벽이 높았다.

 

 

 

3. React

3-1. 라이브러리? or 프레임워크?

 다른 차이점도 많이 있지만 그중 하나를 보면 라이브러리와 프레임워크는 디렉토리 구조가 있는가 없는가로 나뉠 수 있다.

라이브러리는 디렉토리 구조가 없지만, 프레임워크는 디렉토리 구조가 있다.

 

최초의 페이스북에서 리액트를 만들었을 당시에는 라이브러리로 만들었다. 리액트가 발전하면서 사람들이 더 쉽게 결과물을 만들기 위해서 `CRA`명령어를 사용하면 구조를 만들어주는 기능을 만들면서 라이브러리와 프레임워크의 용어의 혼선이 왔다.

 

처음 시작하는 단계이니 당연히 라이브러리 단위로 공부할 예정

 

 

3-2. 사용하는 방법

<script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>

 

3-3. React에서의 상태 (state)

데이터가 바뀌면 화면이 바뀐다는 말을 리액트에서 적용하면 상태가 바뀌면 컴포넌트가 바뀐다라는 의미로 사용할 수 있다.
리액트 컴포넌트에 데이터가 바뀌면 UI가 자동으로 갱신된다는 말이다.
그렇기 때문에 리액트 개발의 핵심은 상태값을 효율적으로 관리하여 , 불필요하게 업데이트되지 않도록 관리해야 한다.

 

 

3-4. ReactDOM의 역할

real DOM은 브라우저가 트리구조를 만들면서 렌더를 바로 진행하지만 reactDOM은 virtual DOM으로 가상의 돔에서 렌더를 하여 실제 돔과 비교를 하고, 달라진 부분을 실제 DOM으로 전달하여 그 부분만 랜더를 시켜서 브라우저 내에서 발생하는 연산의 양을 줄이고 성능을 개선시킬 수 있다.

 

 

4. JSX

JSX는 HTML 태그를 변수로 할당하고 호출하면서, 리턴할 수 있는 자바스크립트의 확장 문법이라고 생각하면 된다. 순수 자바스크립트의 문법이 아니기 때문에 babel을 이용하여 트랜스파일 과정을 거쳐 브라우저가 읽을 수 있는 자바스크립트 문법으로 바꿔야 한다.

BABEL : javascript 컴파일러, 트랜스컴파일러이다. 코드가 실행되기 전 특정 내용의 코드를 변경할 때 사용한다.

 

<!-- 바벨 CDN -->
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>

<!-- 작성하는 javascript 파일의 script의 타입을 type="text/babel"로 바꿔준다. -->

 

4-1. JSX 문법

최상위 엘리먼트는 한 개로 감싸있어야 한다.
하위 엘리먼트는 몇 개가 있어도 상관없다.

// 올바른 문법
<div>
    <h1></h1>
    <h2></h2>
</div>

//틀린 문법
<h1></h1>
<h2></h2>

 

5. DOM / React / JSX를 이용한 React  문법 비교

<body>
        <div id="root1"></div>
        <div id="root2"></div>
        <div id="root3"></div>

        <script type="text/javascript">
            const div = document.createElement("div")
            const txt = "hello world!"
            div.innerHTML = txt

            document.querySelector("#root1").append(div)
        </script>

        <script type="text/javascript">
            class Hello extends React.Component {
                render() {
                    return React.createElement("div", null, "hello World! root2")
                }
            }
            const root2 = ReactDOM.createRoot(document.querySelector("#root2"))
            root2.render(React.createElement(Hello))
        </script>

        <script type="text/babel">
            class Hello2 extends React.Component {
                render() {
                    return <div> Hello, world! root3</div>
                }
            }
            const root3 = ReactDOM.createRoot(document.querySelector("#root3"))
            root3.render(<Hello2 />)
        </script>
    </body>

 

 

GitHub

https://github.com/100space/202302/tree/main/21_react-life_cycle%2Ccomponent

 

반응형