[React] Front-End

[리액트기초] 2) 리액트 개념정리 / 컴포넌트 class vs function / html-js-jsx연동

ddgoori 2021. 5. 6. 22:04

컴포넌트

클래스 / 함수  <- 2가지로 만들 수 있다.

 

 

class: 리액트에서 제공하는 Component라는 클래스를 상속해서 만들 수가 있음

내컴포넌트가 스테이트가 있고, 스테이트가 주기적으로 업데이트 되어야하면 class

-> state라는 오브젝터가 들어있음

-> state가 변경되면 render함수가 호출됨

-> DOM TREE에 올라갔을때, 나왔을때 등 컴포넌트의 상태에 따라 함수를 구현해주면 알아서 해주는 라이프사이클 메소드가 있음

 

function: 간단한 함수로 만들 수 있다.

컴포넌트 데이터가 정적이면 function

-> 함수는 한가지의 기능을 수행하는 단위라서.. state나 라이프사이클메소드가 없음.

-> BUT, react 16.8 부터는 리액트훅이 생김. 그럼 function에서도 state, lifecyclemethod 다 가능

-> 왜 굳이 리액트 훅이 도입되었나?

    기존 클래스컴포넌트에서 할 수 있는 것처럼 동일한 기능이 가능하도록 됨

     그럼 왜 생김? class가 어렵다. 

     클래스에 멤버변수에 접근하면 this.이름 this.나이 <-이게 불편

     functional progrmming이 유행하면서 훅이 도입됨!

    컴포넌트가 마운트되었을때 언마운트되었을때 업데이트 되었을때가 나누어져있었는데, 훅을 이용하면 중복줄일 수 있음

 

 

호불호가 갈려서 class / function(react hook)두 가지 다 이해하는게 중요.

 

Class

 

React.Component

React.PureComponent

 

Function

 

function

memo(function)

React Hook

 

배울 내용들!

 

JSX<-HTML과 차이점?

State 와 Props의 차이점?

SyntheticEvents?

refs? 언제사용?

Lifecycle methods

Lists and keys

developer tools 

techniques

 

-------------------------------------

 

1. 템플릿 React 프로젝트 생성

yarn create react-app template

 

 

2. 해당 프로제트 들어가서 

yarn start


//vsc 실행

code .

 

3.

- public 폴더 하위에 있는 것들은 정적인 아이들을 담는 곳. 사용자가 한번에 받아서 컨텐츠가 변하지 않는 아이들. html img resorce들

- 컨텐츠가 다이나믹하게 동적으로 변화되는 것들이 src (source)에 있음.

(예전 버전은 js가 그대로라면 캐시가 되어있어서 따로 다운받지 않아도됨 ex.webpack관련됨)

 

 

jsx 확장자를 쓰면 리액트 컴포넌트라는 것을 알 수 있음.

파일명은 소문자로! 아이콘도 같이 바뀜

순수 js 인지 리액트 컴포넌트인지 확인하기

 

 

import React from 'react-dom';

-> 리액트는 순수 자바스크립트임. 이걸 이용해서 컴포넌트를 만들어나감.

브라우저는 html css 순수js만 이해가능

그래서

우리가 만든 리액트를 순수 html과 연결해야함

 

사용자에게 궁극적으로 index.html로 배포함

여기있는 root로 연결시켜줌

 

index.js의 react-dom이라는 라이브러리에서 ReactDOM이라는 클래스를 가져옴

-> 그리고 가져온 ReactDOM라는 클래스의 렌더함수를 이용해서 

index.html과 연결한 코드

document.getElementById('root')  ====> 얘를 가지고와서 그 요소에 우리의 root 컴포넌트를 연결시켜준다.

  <React.StrictMode>
    <App />
  </React.StrictMode>

이것이 루트

 

 

index.html에는<body>에

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

이렇게 한 줄 있음

 

여기에 index.js에 있는 컴포넌트가 연결되는 것임.

React.StrictMode는 생략가능

 

 

그리고 저기있는 App은 app.jsx에 정의된 컴포넌트임

 

 

3가지 파일을 통해 연결되어있음

html은 화면에 뿌려주는거 브라우저가 이해하는 것!

html과 순수 js를 연동하고, 그 js에서 import해서 jsx에 있는 리액트 컴포넌트를 가져오는 것!

 

index.html 의 22번째줄

 

순수 자바스크립트 index.js의 import. ReactDOM.render()

-> 1,2,4, 6~9줄

-> 8줄의 document.getElementById('root') 

 

app.jsx

-> function 컴포넌트 App()

 

=> root에 결국 app.jsx에 있는 컴포넌트가 그려진다. 

=> react 컴포넌트 결국 html로 변환돼서 브라우저에 나타난다.