최초 렌더링이 끝난이후에, 리액트가 리렌더링을 queueing(대기열, 순서화) 하는 방법에는 여러가지가 있다.
클래스 컴포넌트
*this.setState()*
*this.forceUpdate()*
함수형 컴포넌트
*useState()*
*useReducer()*
여기에서 우리가 기억해야할 중요한 것이 있다.
리액트의 기본적인 동작은 부모 컴포넌트가 렌더링되면, 리액트는 모든 자식 컴포넌트를 순차적으로 리렌더링 한다는 것이다.
예를 들어, A > B > C > D 순서의 컴포넌트 트리가 있다고 가정해보자. B 에 카운터를 올리는 버튼이 있고, 이를 클릭했다고 가정해보자.
*B 의 setState() 가 호출되어, B의 리렌더링이 렌더링 큐로 들어간다.**A 는 업데이트가 필요하다고 체크 되어 있지 않을 것이므로, 지나간다.**B 는 업데이트가 필요한 컴포넌트로 체크되어 있으므로, B를 리렌더링 한다. B 는 C 를 리턴한다.**C 는 원래 업데이트가 필요한 것으로 간주되어 있지 않았다. 그러나, 부모인 B 가 리렌더링 되었으므로, 리액트는 그 하위 컴포넌트인 C 를 렌더링 한다. C 는 D 를 리턴한다.**D 도 마찬가지로 렌더링이 필요하다고 체크되어 있지 않았지만, C 가 렌더링된 관계로, 그 자식인 D 도 렌더링 한다.*즉, 컴포넌트를 렌더링 하는 작업은, 기본적으로 하위에 있는 모든 컴포넌트 또한 렌더링 하게 된다.
또한 일반적인 렌더링의 경우, 리액트는 props 가 변경되어 있는지 신경쓰지 않는다. 부모 컴포넌트가 렌더링 되어 있기 때문에, 자식 컴포넌트도 무조건 리렌더링 된다.