Post

부모, 자식 컴포넌트에서의 useEffect 실행 순서

Report 페이지 기능

1. 선택한 파일에서 진행한 분석 종류를 select로 선택할 수 있다.

  • 초기값 = Preprocess

그림4

2. select에서 선택한 분석 종류의 결과지를 보여준다.

  • 분석 종류가 변경될 때마다 각 분석에 해당하는 결과지를 가져와야 한다.

🖥️ 적용 화면

dacbaf98-aaee-40ec-8107-318f3dce83ad




Report 페이지 구조 및 컴포넌트 별 기능

📚 구조

image

📚 컴포넌트 별 기능

report

  • 파일 불러와서 파일 리스트 띄우기, 파일 선택하면 fileid값 변경


AnalysisReport

  • report에서 fileid을 변경하면, 기본값인 preprocess로 변경
  • select box선택 시, 선택한 analysistype ReportLayout로 전달


ReportLayout:

  • AnalysisReport에서 받은 analysistype에 따라 각 해당하는 결과지 보여줌.




❗문제 상황

  • ReportLayout에서 결과지 생성을 위한 정보를 S3에서 받아오는데 요청이 2번 보내지는 것을 확인

  • fileid가 변경될 때, 초깃값인 preprocess에 대한 요청을 해야하는데 이전에 선택한 분석 종류에 대한 요청을 보낸 다음 preprocess를 요청




❗원인

  • ReportLayout에서 fileid가 변경될 때 정보를 다시 받아오는데 이전의 분석 종류가 초기화 되기 전에 실행되고 초기화 후에 실행되어 요청이 2번 감.

  • report에서 fileid가 변경되면, AnalysisReport preprocess로 초기화 시키는데 초기화 되기 전에 ReportLayout이 실행되는 것 같음.

  • 실행 순서를 보니 맨 하위 컴포넌트의 useeffect부터 상위로 실행됨.
    => 하위의 useEffect가 실행되니 초기화 되기 이전의 분석 종류에 대한 결과를 가져온 다음 초기화된 결과를 가져온다.

  • 당연히 useEffect가 상위 -> 하위로 실행될 것이라고 생각하였는데 자료도 찾아보고 test 컴포넌트를 생성하고 테스트 해보니 하위에서부터 실행되었댜.




💡문제 해결

  • 하위 컴포넌트의 useEffect가 먼저 실행된다면 젤 하위에서 초기화를 진행시키면 될 것 같았다.

  • AnalysisReport에서 preprocess로 초기화 해주던걸 props로 넘겨 ReportLayout에서 fileid가 변경되었을 때 초기화 해주도록 변경하였더니 요청이 한번만 가는 것을 확인할 수 있었다.

This post is licensed under CC BY 4.0 by the author.