O(n) 복잡도의 휴리스틱 알고리즘를 사용.
두개의 트리를 비교할 때, 두개의 루트 엘리먼트부터 비교.
ex) a => img, Button => div
동일한 내역은 유지하고 변경된 속성들만 갱신
아래와 같이 className
만 변경되면 리액트는 DOM 노드의 className
만 수정한다
<div className="before" title="stuff" />
<div className="after" title="stuff" />
컴포넌트가 갱신되면 렌더링 state는 유지된다
현재 컴포넌트의 props를 갱신
UNSAFE_componentWillReceiveProps()
UNSAFE_componentWillUpdate()
componentDidUpdate
전역에서 유일할 필요는 없다. 형제사이에서 유일하면 된다.
최후의 수단으로 index를 key로 사용하는데 항목들이 재배열되면 엉키게 되므로 재배열이 되지 않을때만 index를 key로 사용하자.
매우 비슷한 결과물을 출력하는 두 컴포넌트를 교체하고 있다면, 그 둘을 같은 타입으로 만드는 것이 더 나을 수도 있습니다.
key는 변하지 않고, 예상 가능하며, 유일해야 합니다.