전에 배운 것과 오늘 배운 것이 섞여 있습니다.
렌더링 하는 동안이 아닌 외부에서 발생하는 부수적인 일들
ex) 화면 업데이트, 애니메이션, 데이터 변경
useEffect hook을 호출해 컴포넌트가 반환한 JSX에 연결 가능props, state, context)로컬 뮤테이션함수내 지역 변수는 렌더링 간에 값을 기억 X
: 컴포넌트를 다시 렌더링 할 때 함수 영역은 다시 초기화됨 (변수도 초기화)
지역 변수를 변경해도 렌더링 X
: 리액트는 지역 변수 값이 변경돼도 컴포넌트를 다시 렌더링 해야 한다고 인식 안함
const [상태, 상태변경함수] = useState(초기값)
use로 시작하는 모든 함수render 함수
📍 참고)
클래스 방식 컴포넌트
: Component 클래스를 상속받아 render 메서드를 사용하여 JSX를 반환
함수 방식 컴포넌트
: 함수를 사용하여 JSX를 직접 반환합니다.
두 컴포넌트 모두 <div>, <h1>, <p> 등의 JSX 요소를 반환
이렇게 반환된 JSX는 리액트 엘리먼트로 해석되어 리액트 엔진에 의해 처리되고 화면에 렌더링
// 클래스 방식 컴포넌트
import React, { Component } from 'react';
class ClassComponent extends Component {
render() {
return (
<div>
<h1>안녕</h1>
<p>나는 클래스 방식 컴포넌트야</p>
</div>
);
}
}
export default ClassComponent;
// 함수 방식 컴포넌트
import React from 'react';
const FunctionComponent = () => {
return (
<div>
<h1>안녕</h1>
<p>나는 함수 방식 컴포넌트야</p>
</div>
);
}
export default FunctionComponent;

컴포넌트는 html 태그를 반환하는것 처럼 보이지만
React Element를 반환함
: 해당 컴포넌트가 렌더링 하고자 하는 UI의 모든 정보를 가지고 있는 객체
프로젝트에 모든 React Element를 모아서 Virtual DOM을 만든다

만들어진 Virtual DOM을 실제 DOM에 반영해서 브라우저 렌더링한다.
리액트에서 수정사항이 생기면 React Element를 만드는 것부터 다시 시작해서 새로운 Virtual DOM을 만든다.
그리고 이전에 만든 Virtual DOM과 차이를 비교한다.
차이가 있는 부분만 실제 DOM에 반영한다. (이렇게 모아서 한번만 DOM을 수정)
이러한 과정을 조화(Reconciliation)라고 함
결국 방식 자체는 처음부터 다시 렌더링하는 것처럼 보이지만
사실은 최적의 자원을 사용하여 수행함
