next로 제작한 블로그프로젝트 리엑트 쿼리 적용시키기 part1 (스테픈 2km완료)

image.png

image.png

next.js에서 리엑트 쿼리를 도입해보기 위해
공식문서를 읽어보는 중입니다.

아마 리덕스처럼 wrapping을 해서 사용해야하는것 같은데요

자세한 사용법 및 개념을 파악하기 위해 공식문서를 먼저 읽어보고 있습니다.

v5버전으로 읽어보는중이네요

image.png
제가 만든 프로젝트에 도입하기 위해
일단 예제를 보며 따라해보고 있습니다.

image.png

일단 제 블로그의 구조는

이렇게 서버 컴포넌트에서 fetch로 데이터를 받아와서

클라이언트 컴포넌트에 props로 전달해주는 방식으로 동작하고 있는데요

이 부분을 수정해야겠습니다.

설명을 읽어보니 next.js에서 getStaticProps 를 사용해야하는군요
해당 기능으로 데이터를 사전에 fetch하고 props로 전달한뒤

해당 props를 받아서 전달할 클라이언트 컴포넌트를
HydrationBoundary state={dehydratedState} 이런식으로 감싸줘야하는군요

몇번 삽질끝에

image.png

코드를 이렇게 수정했는데요

제가 getStaticProps 를 처음 사용해보는데

getStaticProps는 정적 페이지를 빌드할 때 호출됩니다.
이를 통해 서버에서 데이터를 미리 가져와 빌드 시점에 정적 HTML 파일로 생성할 수 있고
이 함수는 Next.js의 데이터 페칭 메서드 중 하나로, 정적 사이트 생성(SSG)에 사용된다고 하네요

사실 getServerSideProps 이걸 사용하던 getStaticProps 이걸 사용하던 데이터 페칭만 사전에 하면
동작하는건 문제 없습니다..

일단 이렇게 코드를 추가해서

기존에 blog라는 서버사이드 컴포넌트에서 fetch를 해서 던저주던 부분을
리엑트 쿼리로 사전에 fetch하는거로 변경했습니다

아래 data props를 전달하는 부분을 삭제하고

데이터를 전달받는 페이지에서 나머지 작업을 하며 ㄴ되는데요

image.png

리엑트 쿼리에 data가 보통 fetch의 결과값으로 들어와서

구조 분해 할당으로 받아서 콘솔에 찍어보려고 했는데요

이미 data 변수명을 props로 전달중이라 아무 이름으로 일단 콘솔에 찍어봤습니다

image.png

일단 데이터가 잘 들어오네요

여기에서 서버 컴포넌트를 한단계 더 넘어가도 잘 동작하는지도 테스트 해봐야겠네요

image.png

일단 테스트를 해보는데

렌더링이 너무 많이되어 사이트가 터지네요

image.png

데이터가 잘 들어오는것 같긴 한데

렌더링때문이라 쓰여있어서

해당부분을 고민을 좀 해봐야겠네요

현재 useState르 사용해서 데이터를 받고있는데

여기에 데이터가 추가될때마다 렌더링이 발생해서 그런게 아닌가 싶은데요

이결 useRef로 변경하는 방향으로 생각하는게 맞는지 ..음

고민되네요

image.png
제가 생각하는 렌더링 부분을 수정했으나

같은 오류가 발생하는걸로 보아서

리엑트 쿼리의 문제인지 저도 해깔리네요;

useRef에 값을 넣어보고 처리되는지 봐야겠습니다.

보통 useRef는 렌더링이 안되는게 맞지만

리엑트 쿼리의 경우 데이터의 페칭이나 에러 등등의 쿼리가 변경되는경우 렌더링이 되는걸 활용해서

useState로 화면을 업데이트 하는걸 중단하고

리엑트 쿼리로 렌더링하는걸 담당하게 변경시키려고 합니다.

이렇게 하면 조금더 렌더링이 줄어들겠지요

image.png

몇번 고민해서

status값이 success로 변경되면 하도록 구성해봤으나

값이 안들어올수도 있다고 뜨는걸로보아

이게 아닌것 같고

이렇게 코드를 바꿔도 오류나네요

생각해보니

image.png

리엑트 쿼리의 v5버전에서는 옵션에서 사용하던 onSuccess 가 사라졌군요

대신

image.png

issuccess가 있네요

이걸 활용해서
useEffect로 렌더링 시키면 될것 같습니다.

일단 여기까지 생각해보고

내일 나머지 작업을 이어가야겠습니다.


스테픈 2km완료 ![image.png]()

Coin Marketplace

STEEM 0.19
TRX 0.13
JST 0.030
BTC 60289.82
ETH 3304.15
USDT 1.00
SBD 2.42