강의

멘토링

커뮤니티

Inflearn Community Q&A

kimhecan's profile image
kimhecan

asked

[Renewal] Creating NodeBird SNS with React

Preparing for server-side rendering

getServerSideProps에서 데이터요청관련

Resolved

Written on

·

418

0

context.store.dispatch후 가져오는 데이터에 따라서 리다이렉트를 하고 싶은데 getServerSideProps안에서 데이터를 확인할 수 있는 방법이 있나요?? 데이터를 확인해서 분기처리 하고 싶습니다.

그리고 순서가 nextjs서버에서 node서버에 데이터 요청을 보내고 그 데이터로 화면을 그려서 보내주는데 화면말고 302응답을 보내려면 어떻게 해야하나요??

reduxnodejsexpressreactNext.js

Answer 8

0

kimhecan님의 프로필 이미지
kimhecan
Questioner

axios처리해서 해결했습니다! 감사합니다 제로초님!

0

zerocho님의 프로필 이미지
zerocho
Instructor

이렇게 비동기 redux가 연달아 두 번 나오는 경우는 redux로 하기 좀 어렵습니다. 아예 한 번에 a얻어온 후 b를 같이 얻어오는 비동기 action을 만드시거나, 그냥 axios 요청을 따로 보내서 props로 받으시는 게 좋습니다.

0

kimhecan님의 프로필 이미지
kimhecan
Questioner

예를 들어 a 데이터와 b데이터가 필요한데 b데이터는 a의 응답값을 통해서 알아낼 수 있습니다 그러면 일단 dispatch 후 리덕스에 a를 얻고 그 a 데이터로 b를 요청해서 얻는데 a를 얻고 b를 요청하는 과정에서 toPromise()를 안하면 상태가 안들어와있습니다..그럼 axios로 따로 요청을 보내야할까요...?

0

zerocho님의 프로필 이미지
zerocho
Instructor

toPromise 후 왜 다시 getState를 하시나요? END 후에는 채널이 닫혀서 더이상 리덕스 요청을 보낼 수 없습니다. 그 전에 필요한 데이터를 다 dispatch한 후 마지막에 끝내는 용도로 toPromise()와 END 해야 합니다.

0

kimhecan님의 프로필 이미지
kimhecan
Questioner

sagaTask.toPromise(); 후 데이터를 context.store.getState() 로 가져와서 다시 요청을 보내는 방법으로 해봣는데 context.store.dispatch(END)후 채널이 닫혀서 안되는 거 같습니다 ㅠㅠ 그렇다고 context.store.dispatch(END) 전에 sagaTask.toPromise()를하면 계속 기다리는 현상이 나타납니다 .. END후 다시 켜는 방법이 있나요??

0

zerocho님의 프로필 이미지
zerocho
Instructor

제 생각으로는  첫번째 요청을 보내고 sagaTask.toPromise(); 후 데이터를 context.store.getState() 로 가져와서 다시 요청을 보내는 방법인데..잘모르겠습니다

저도 이 생각을 하고 있습니다. 이렇게 한 번 해보시겠어요?

0

kimhecan님의 프로필 이미지
kimhecan
Questioner

감사합니다!!ㅠ 한가지만 더 질문드려도 될까요??? getServerSideProps 함수안에서 요청을 동기로 하려면 어떻게 해야하나요??

예를 들어 유저정보를 요청하고 그데이터를 가지고 다시 다른 요청을 보내서 유저정보와 다른요청에 대한 정보를 가지고 화면을 만들어 보내주고 싶은데 

지금까지는 next서버에서 node서버에 비동기로 여러개의 요청을 한번에 보냈다면 제가 생각한 기능은 next서버에서 한개의 요청을 보내고 동기로 그 요청에 대한 데이터를 가지고 다시 요청을 보내는 방법이 궁금합니다!!

제 생각으로는  첫번째 요청을 보내고 sagaTask.toPromise(); 후 데이터를 context.store.getState() 로 가져와서 다시 요청을 보내는 방법인데..잘모르겠습니다

0

zerocho님의 프로필 이미지
zerocho
Instructor

데이터는 context.store.getState()로 가져올 수 있습니다. 다만 sagaTask.toPromise()보다 뒤에 위치해야 위에서 dispatch한 내용이 들어가 있을 것 같네요.

리다이렉트 부분은

if (조건) {
  context.res.writeHead(302, { Location: '/주소' });
  context.res.end();
}

를 넣어주시면 됩니다.

kimhecan's profile image
kimhecan

asked

Ask a question