Reconciliation
virtul dom을 사용하는 react가 실제 돔에 변경사항을 반영하는 로직
- 상태 변화가 발생 시, React는 해당 컴포넌트 및 자식 컴포넌트를 재실행
- 갱신된 상태를 기반으로 새로운 가상 DOM을 생성
- 이전 가상 DOM과 새로 생성된 가상 DOM을 비교
- 트리 구조를 순회하면서 새로 변경된 부분을 식별
- 해당 부분 알고리즘이 o(n^3)라서 가정을 사용
- 서로 다른 타입의 두 엘리먼트는 서로 다른 트리를 만들어낸다.
- 개발자가 key prop을 통해, 여러 렌더링 사이에서 어떤 자식 엘리먼트가 변경되지 않아야 할지 표시
- 위 이유로, 엘리먼트의 독립적인 값이 들어가야함.
- 변경 사항을 실제 DOM에 업데이트
주의 사항
엘리먼트의 타입이 다른 경우
해당 엘리먼트부터 파괴하고 새로 트리를 생성(아래로 전부 unmount) - 같을 경우에는 변경된 내용만 업데이트(rerendering)
key props
배열로 컴포넌트를 렌더링 하는 경우는 매우 흔한데, key를 통해 기존 트리와 이후 트리의 자식들이 일치하는지 확인
key가 변경 되지 않으면 그 컴포넌트는 다시 실행하지 않음
배열의 인덱스를 key로 사용하면 재배열되는 경우 비효율적으로 동작