const [변수, 변수를 변경하는 함수] = useState('초기값');
- 함수를 만들고 그 함수는 매개변수를 받는다
- setText 함수에 event.target.value 로 input에 들어오는 데이터로 text를 바꿔준다
- input태그의 onChange={ }를 사용한다
❗️ onChange와 value는 키 : 페어로 엮어주는것이 좋다- 💡
엮었을 때 - 제어 컴포넌트
엮지 않았을 때 - 비제어 컴포넌트
리액트에서는 화면에 리렌더링을 결정 할 때 state의 변화를 확인한다
만약 원시 데이터가 아닌 데이터를 수정 할 때 불변성을 지키지 않고 직접 수정을 하면 값은 바뀌지만 메모리 주소는 변함이 없다.
❗️즉, 개발자가 값을 바꿨지만 리액트는 state가 변했다고 인지하지 못해 리렌더링이 일어나지 않는다
잘못된 예시
올바른 예시
스프레드 오퍼레이터 문법을 사용하여 불변성을 지키면 된다
DOM - 명령형 프로그래밍
가상DOM - 선언형 프로그래밍
리액트는 가상DOM을 이용해 실제 DOM을 변경한다
리액트에서 렌더링은 컴포넌트가 현재 props와 state의 상태에 기초하여 UI를 어떻게 구성할지 컴포넌트에게
요청하는 작업을 뜻한다
- 리액트는 항상 2가지 버전의 가상DOM을 가지고 있는다
1) 화면이 갱신되기 전 구조가 담겨있는 가상DOM 객체
2) 화면 갱신 후 보여야 할 가상DOM 객체- diffing
state가 병경되면 2번에서 생성된 가상DOM과 1번에서 이미 갖고 있던 가상DOM을 비교하여 어느 부분에서 변화가 있었는지 파악한다- 재조정
파악이 끝나면 변경이 일어난 부부만 실제 DOM에 적용한다
❗️적용 시 변경된 부분을 하나씩 적용하지 않고, 변경사항을 모두 모아 한번에 적용시킨다
ex) 화면에 있는 5개의 요소가 바뀌어야 한다면 ?
실제 DOM - 5번의 화면 갱신
가상 DOM - 1번의 화면 갱신