강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

Milkyway님의 프로필 이미지
Milkyway

작성한 질문수

[리뉴얼] React로 NodeBird SNS 만들기

안녕하세요. 질문 있습니다.

해결된 질문

작성

·

368

·

수정됨

0

안녕하세요 질문 있습니다. 노드 버드 react-query 폴더를 보면서 따라하고 있습니다. 현재 주소에서 storeId를 id 값으로 하여 서버에서 각기 다른 데이터를 받아오고 있습니다.

그런데 아래와 같이 router.query로 값을 불러오거나 아래 getStaticProps에서 storeId를 보내도 컴포넌트 내부에서 storeId를 한번 undefined로 인식해서 오류가 나더라고요. 이럴 경우 어떤 방식으로 해결해 나가는게 좋을지 궁금합니다.

서버에 요청 보내는 api에서 파라미터의 값이 undefined일 경우 실행을 안시키는 식으로 했는데 좋은 방법이 아닌거 같고 페이지 내부에서 해결해야 할거 같긴 한데 어떤 식으로 접근해야할지 잘 모르겠습니다ㅠ

 

 

import React from 'react';
import { dehydrate, QueryClient, useInfiniteQuery, useQuery } from 'react-query';
import DefaultLayout from '@layouts/DefaultLayout';
// import InfiniteCarousel from '@components/Commons/InfiniteCarousel';
import { loadStoreAPI } from '@apis/store';
import { GetStaticProps } from 'next';
import { ParsedUrlQuery } from 'querystring';
import { useRouter } from 'next/router';

interface Params extends ParsedUrlQuery {
  storeId: string;
}

const Home: React.FC<Params> = () => {
  const router = useRouter();
  const { storeId } = router.query as Params;
  console.log(storeId);
  const { data: storeInfo } = useQuery(['storeInfo', storeId], () => loadStoreAPI(storeId));

  return (
    <DefaultLayout>
      <h1>home123</h1>
      {/*<InfiniteCarousel></InfiniteCarousel>*/}
    </DefaultLayout>
  );
};

export const getStaticPaths = async () => {
  return {
    paths: ['/app/store/[storeId]'],
    fallback: true,
  };
};

export const getStaticProps: GetStaticProps = async ({ params }) => {
  const { storeId } = params as Params;

  if (!storeId) {
    return {
      redirect: {
        destination: '/',
        permanent: true,
      },
    };
  }

  console.log(storeId);
  const queryClient = new QueryClient();

  await queryClient.prefetchQuery(['storeInfo', storeId], () => loadStoreAPI(storeId));

  return {
    props: {
      dehydratedState: dehydrate(queryClient),
      storeId,
    },
  };
};

export default Home;

답변 1

Milkyway님의 프로필 이미지
Milkyway
질문자

맞습니다. 문서보고 useQuery를 여러개 쓸때 동기적으로 사용하는건가 넘기고 저렇게 써볼 생각을 못했네요ㅠㅠ 정말 감사합니다!!

추가로 위 코드에서 getStaticPaths를 빼면 아래와 같은 에러가 나던데 혹시 저 부분을 없앨수 있는 방법도 있을까요???

Server Error
Error: getStaticPaths is required for dynamic SSG pages and is missing for '/app/store/[storeId]'.
Read more: https://nextjs.org/docs/messages/invalid-getstaticpaths-value
This error happened while generating the page. Any console logs will be displayed in the terminal window.

항상 친절히 답변주셔서 정말 감사합니다!

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

다이나믹라우팅에서는 gSP를 뺄 수 없습니다.

Milkyway님의 프로필 이미지
Milkyway
질문자

답변 감사합니다!!

Milkyway님의 프로필 이미지
Milkyway

작성한 질문수

질문하기