inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Chuỗi bài học về Node và React để học bằng cách làm theo - Tạo trang Reddit (NextJS) (Bộ định tuyến trang)

context에서 useEffect 선언 부분 질문 있어요.

294

dKim

1 câu hỏi đã được viết

0

AuthProvider에서 useEffect를 추가해서 loadUser가 호출되도록 해주었는데 모든 페이지 접근시 2번씩 호출되는 원인이 무엇일까요?

// app.tsx
<AuthProvider>
   <Component {...pageProps} />
</AuthProvider>

// AuthProvider
  useEffect(() => {
    async function loadUser() {
      try {
        const res = await axios.get("/auth/me");
        dispatch("LOGIN", res.data);
      } catch (error) {
        console.log(error);
      } finally {
        dispatch("STOP_LOADING");
      }
    }
    console.log("loadUser");
    loadUser();
  }, []);



그리고 커뮤니티 생성 페이지에서는 getServerSideProps를 선언해두었기 때문에 여기서도 /auth/me api 를 호출해주어서 결국 커뮤니티 생성 페이지에서만 총 3번이 호출되고 있어요.

제가 잘못 구현한 것일까요?

정리하자면,
1. 현재 코드에서는 loadUser() 메서드가 1회만 호출되어야 할 것 같은데, 2번 호출되는 이유는 무엇인지?

2. 커뮤니티 생성 페이지에서는 /auth/me api를 3번 호출하고 있는데, 횟수를 줄일 수 있는지? (이건 url 직접 입력해서 들어가지 않으면 1회만 호출할 것 같긴 하네요.)

서버 로그입니다.(각각 커뮤니티 생성 페이지, 로그인 페이지)

react node.js postgresql docker typescript 클론코딩 next.js

Câu trả lời 1

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다.

dKim님의 질문에 답변드리겠습니다.

  1. loadUser() 메서드가 두 번 호출되는 현상은, React Strict Mode가 활성화되어 있을 때 발생할 수 있습니다. 개발 모드에서만 useEffect가 두 번 실행되어 두 번 로그가 찍히는 것이니, 프로덕션 빌드에서는 한 번만 호출될 것입니다. Strict Mode는 주로 개발 단계에서 부수효과를 더 명확하게 파악하기 위해 사용되므로, <React.StrictMode> 태그를 제거하면 이중 호출을 방지할 수 있습니다.

  2. getServerSideProps에서 API를 호출하는 경우, 클라이언트 측에서 추가 useEffect로 동일한 API를 호출할 필요가 없을 수 있습니다. 서버에서 사용자 정보를 미리 로드한 후 페이지의 props로 전달하여 API 호출 횟수를 줄일 수 있습니다. 만약 getServerSideProps에서 인증 정보가 필요하다면 각각의 페이지에 필수적으로 인증 정보를 서버 측에서 미리 처리하여 전달함으로써 클라이언트 측에서의 중복 호출을 줄일 수 있습니다.

조금 더 상세한 내용을 원하신다면, 제공된 서버 로그만으로는 제한적이므로 서버 설정, 클라이언트의 상태 관리 로직, SSR 로직 등 전반적인 코드 구조를 검토할 필요가 있습니다.

도움이 되셨길 바랍니다.

toJson을 추가하면 [sub].tsx에서 sub를 받아오지 못합니다.

0

117

2

쿠키 저장이 되지 않습니다.

0

222

1

AxiosError {message: 'Request failed with status code 401/500', name: 'AxiosError', code: 'ERR_BAD_RESPONSE', (2)

0

580

1

AxiosError {message: 'Request failed with status code 401/500', name: 'AxiosError', code: 'ERR_BAD_RESPONSE',

0

647

1

overload 에러

0

169

1

docker compose up 오류

0

206

1

부록) remark 강의 중 parmas 오류

0

139

1

3000번은 잘 들어가지는데 80번은 안됩니다.

1

292

0

커뮤니티를 올리고 난 후 404 page

0

209

1

tailwind css 문제인지, className 에 적용한 css가 적용되지 않아요.

0

1039

2

tsx 수정 시 마다 빌드 후 서버 시작 해야하나요?

0

651

2

useState 쳤을 때 자동완성 되는 단축키 무엇인가요? extention 인가요?

0

804

2

리액트 서버 npm run dev 와 npm run build 후 npm start 의 차이

0

4589

2

data 폴더가 생성되지 않아요.

0

524

1

docker-compose up 오류

0

814

1

회원 가입 페이지 기능 생성(3) 중 에러

0

379

2

Entity에 toJSON 코드 입력 후 404 에러

0

252

1

src 폴더구조

0

509

2

서버 실행 시 에러 관련하여 답변받고 1차 조치했는데 여전하여서 질문 남깁니다

0

298

1

엔티티 모두 작성 후 서버 실행 시 에러가 발생합니다

0

311

1

회원가입 누르면 404에러가 뜹니다 ;-;

1

421

1

nextjs버젼에 대해서 질문드립니다.

0

372

1

<npm run dev>시 -61 에러가 나타납니다!

0

356

1

docker-compose.yml 은 왜 루트에 하나염

0

328

1