Published 2023. 12. 21. 21:41
// SSR
export const getServerSideProps = wrapper.getServerSideProps(
(store) => async () => {
store.dispatch({
type: LOAD_USER_REQUEST,
});
store.dispatch({
type: LOAD_POSTS_REQUEST,
});
//saga에서 END 액션불러오기
store.dispatch(END);
//saga에서 success될때까지 기다려주는 액션
await store.sagaTask.toPromise();
}
);
강의에서 CSR에서 dispatch하던 부분을 SSR로 바꾸는 도중 store.dispatch와 store.sagaTask.toPromise()를 적는 이유가 궁금해서 조금 더 찾아보는 김에 포스팅도 남기게 되었다.
강의는 Redux-Saga와 Next.js를 사용하고있다. 넥스트의 경우 서버사이드 랜더링을 할 수 있다. store.dispatch(END)부터 아래의 코드가 없을경우는 REQUEST이후 SUCCESS 액션을 가져오지 못해서 유저와 게시글 데이터를 가지고 오지 못하는 문제가 생겼었다.
하지만 코드를 작성하고나니 SUCCESS까지 수행하고 원하는 데이터까지 성공적으로 가져왔다.
- store.dispatch(END)를 사용하지 않을경우 saga가 끝나지 않았다. END를 디스패치 해줘야 store를 통했던 한 사이클을 종료해주는 걸로 보인다.
- 그리고 store.sagaTask.toPromise()를 해야 Success까지 서버에서 가져온 후 디스패치를 처리하는걸로 보인다. (미들웨어)
나중에 툴킷으로 바꿀생각인데 벌써 걱정스
반응형
'개발 > Javascript' 카테고리의 다른 글
[Javascript] p5js로 해머게임 만들기 (빵형의 개발도상국) (4) | 2024.01.21 |
---|---|
[Javascript] history.pushState() (2) | 2024.01.02 |
[Next.js] create-next-app으로 프로젝트 만들고 기본 라우팅까지 잡아보기 (0) | 2023.07.13 |
[Javascript] 웹팩 변경사항 바로바로 적용하기 (webpack-dev-server) (2) | 2023.06.07 |
[Node] Express와 Mongoose 연결하기 (0) | 2023.03.18 |