render
라는 함수가 있다. React에서의 render 함수는React.Component 클래스에서 제공되는 함수이며, 컴포넌트 클래스의 인스턴스가 render 함수를 호출할 때 렌더링된 결과물을 반환한다.import React from 'react';
import { LoginPage } from './components/LoginPage';
const App = () => {
return (
<div className="App">
<LoginPage />
</div>
);
}
위와 같이 App 컴포넌트가 LoginPage 라는 컴포넌트를 반환하고 있다.
ReactDOM.render(App, document.getElementById('root'));
위는 index.js 에 있는 render 함수이다. 첫 번째 인자로 App 컴포넌트 함수가 들어가있다. 여기서 ReactDOM.render 함수는 App 컴포넌트 함수를 호출하고, 그 결과물을 document.getElementById('root') 요소에 렌더링한다. 이 때 App 컴포넌트 함수에서 반환된 JSX가 render 함수를 호출한 결과물에 해당하게 된다.
리액트의 화면이 바뀌면 사용자 입장에서는 페이지가 바뀌는 것처럼 보이겠지만, 실제로는 변화된 데이터에 따라 새로운 요소로 갈아끼워지는 것이다. 이를 리액트에서는 조화과정
, 그리고 개발자들 사이에선 일반적으로 UI 업데이트, 리렌더링
이라고 불린다.
리액트에서는 초기 렌더링을 위해 먼저 render 함수를 호출한다. 그리고 컴포넌트 내의 데이터 변경이 일어나면 새로운 데이터로 다시 render 함수를 호출한다. 그렇게 되면 기존 Vanilla Javascript와 뭐가 다른 것일까...🤔
→ render 함수를 호출하고 바로 실제 DOM에 반영하는 것이 아니고 리액트에서는 vitrual DOM
을 사용한다고 한다!
이것이 리액트가 가진 가장 큰 장점이다.
1. 데이터를 업데이트하면 전체 UI를 Virtual DOM에 리렌더링
2. 이전 Virtual DOM에 있던 내용과 현재 내용을 비교
3. 바뀐 부분만 실제 DOM에 적용
그래서 리액트는 프레임워크 보다는 라이브러리에 가깝다.
props 객체로 사용할 데이터를 해당 컴포넌트 함수에 넘긴다.
모듈방식으로 코드를 짜는 것이 정말 편할 것 같다.
더 공부해봐야 알겠지만 확실히 순수 자바스크립트로 진행한 프로젝트보다 리액트를 사용하여 진행한 프로젝트가 더 깔끔할 것 같은 기분이 든다.