index.tsx 파일은 페이지 컴포넌트이고, app-test-box.tsx 파일은 제가 만든 컴포넌트 입니다. use-test.hook.ts 파일 또한 제가 만든 커스텀 훅입니다.
위 상태에서 index.tsx 페이지 컴포넌트에 접근하면 브라우저의 콘솔창은 아래와 같이 표시됩니다.
1. 부모 컴포넌트의 useState 가 호출됩니다. 2. 부모 컴포넌트에 명시된 커스텀 훅의 useState 가 호출됩니다. 3. 부모 컴포넌트의 뷰(View)가 렌더링 됩니다. 4. 자식 컴포넌트인 AppTestBox 의 useState 가 호출됩니다. 5. 자식 컴포넌트인 AppTestBox 의 뷰(View)가 렌더링 됩니다. 6. 자식 컴포넌트인 AppTestBox 에서 요소의 ref 속성에 넘겼던 콜백함수가 호출됩니다. 7. 부모 컴포넌트에서 요소의 ref 속성에 넘겼던 콜백함수가 호출됩니다. 8. 자식 컴포넌트인 AppTestBox 의 useEffect 함수들이 호출됩니다. 9. 부모 컴포넌트에 명시된 useEffect 함수들이 호출됩니다. 9-1. 작성한 순서에 따라 useEffect 함수는 순차적으로 호출됩니다. 9-2. 부모컴포넌트에 작성된 useEffect 함수들 중간에 커스텀 훅이 존재하고 커스텀 훅 안에 useEffect 가 존재하면 커스텀 훅 안의 useEffect 가 호출되고, 그 다음에 명시된 부모컴포넌트의 useEffect 가 호출됩니다.
위 결과로 인해 알 수 있는 점을 다음과 같이 정리해보았습니다.
1. 요소의 ref 속성에 넘기는 콜백함수는 부모컴포넌트보다 자식컴포넌트에서 먼저 호출된다. 2. 렌더링 되기 전에 해당 컴포넌트의 모든 useState 가 호출된다. 3. 부모 컴포넌트의 뷰(View)가 렌더링 된 이후에 자식 컴포넌트의 useState 가 호출된다. 4. 부모컴포넌트보다 자식컴포넌트의 useEffect 가 먼저 호출된다. 5. 작성된 useEffect 함수 중간에 커스텀 훅이 존재하면 커스텀 훅 안에 존재하는 useEffect 가 모두 호출되고 그 다음 작성된 useEffect 가 호출된다.
테스트를 진행해보고 결과를 정리해보니 모르고 있었던 부분들이 있었네요.테스트를 해보길 잘한 것 같습니다.