inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

next.js에서 swr 서버사이드 렌더링 질문드립니다.

해결된 질문

493

호머

작성한 질문수 4

0

next.js에 swr, typescript를 이용해 노드버드 실습을 해보다가  서버사이드 렌더링에 대해 궁금한 게 생겼습니다.

사용자가 만약 로그인을 한 상태일 때, 서버사이드 렌더링을 해서 컴포넌트에 사용자 정보를 넣어준 상태로  페이지가 보여지도록 하고 싶은데요.

강의에서는 pages/index.js에서 리덕스를 이용하여 LOAD_MY_REQUEST 액션을 dispatch 한 뒤, components/AppLayout.js 에서 useSelector로 me 값을 가져 오면  사용자 정보가 담겨진 채로 AppLayout.js 컴포넌트가 랜더링 됩니다.

swr을 적용해서 동일하게 구현해보려고 하는데요.

swr에서는 page/index.js에서 서버사이드에서 로그인한 사용자 정보롤 가지고 오더라도, components/AppLayout.js에서 useSWR을 사용하면 처음 [로그아웃] 상태일 때의 화면이 잠깐 나오고, [로그인]상태일 때의 모습으로 변합니다.

혹시 swr을 이용해서 pages/index.js에서 서버사이드 렌더링으로 가지고 왔던 값을 components/AppLayout.js에도 페이지 렌더링 초기에 값을 함께 전달해주는 방법은 없을까요?

제가swr을 이용해 아래처럼 적용해봤는데, 다른 방법이 있을까요?

pages/index.tsx

export const getServerSideProps: GetServerSideProps = async function({ req }) {
const cookie: string = req ? req.headers.cookie : '';
if (cookie) {
const data = await fetcher.get('/user', { cookie });

if (data) {
return {
props: { userProps: data },
};
}
}
return {
props: { userProps: null },
};
};

function Index({ userProps }: InferGetServerSidePropsType<typeof getServerSideProps>) {
const { data: user } = useSWR<IUser>('/user', fetcher.get, { initialData: userProps });

return <AppLayout>{user ? user.nickname : '로그인해주세요'}</AppLayout>;
}

components/AppLayout.tsx

function AppLayout() {
const { data: user } = useSWR<IUser>('/user', fetcher.get);

return (
<div css={userNavStyle}>
{user ? (
<>
<Profile image={user.profile} size='40px' />
</>
) : (
<Link href='/login'>
<a href='' className='login'>
로그인
</a>
</Link>
)}
</div>
);
}

Next.js express redux nodejs react

답변 1

0

제로초(조현영)

AppLayout의 props로  userData를 전달한 후 똑같이 initialData로 넣어야 할 것 같습니다.

0

호머

빠른 답변 너무 감사합니다!

swr은 리덕스처럼 서버사이드 렌더링 시 컴포넌트에서 스토어의 값을 가져오는 게 안 되고, props로 전달해주는 방법밖엔 없을까요? ㅠ_ㅠ 

0

제로초(조현영)

스토어를 쓰지 않으려고 SWR을 하는 것이라 방법이 딱히 있을 것 같진 않습니다. 아니면 간단히 context api 붙여도 될 것 같긴 하네요.

0

호머

네! 감사합니다! 구글링을 열심히 해봤는데도 답이 안 나와서 며칠동안 머리만 싸매고 있었는데...

눈이 번쩍 뜨이는 거 같네요.

너무너무 감사합니다! 

넥스트 버젼 질문

0

79

2

로그인시 401 Unauthorized 오류가 뜹니다

0

90

1

무한 스크롤 중 스크롤 튐 현상

0

177

1

특정 페이지 접근을 막고 싶을 때

0

104

2

createGlobalStyle의 위치와 영향범위

0

97

2

인라인 스타일 리렌더링 관련

0

93

2

vsc 에서 npm init 설치시 오류

0

148

2

nextjs 15버전 사용 가능할까요?

0

160

1

화면 새로고침 문의

0

123

1

RTK에서 draft, state 차이가 있나요?

0

155

2

Next 14 사용해도 될까요?

0

452

1

next, node 버전 / 폴더 구조 질문 드립니다.

0

349

1

url 오류 질문있습니다

0

211

1

ssh xxxxx로 우분투에 들어가려니까 port 22: Connection timed out

0

375

1

sudo certbot --nginx 에러

0

1281

2

Minified React error 콘솔에러 (hydrate)

0

470

1

카카오 공유했을 때 이전에 작성했던 글이 나오는 버그

0

249

1

프론트서버 배포 후 EADDRINUSE에러 발생

0

329

1

npm run build 에러

0

519

1

front 서버 npm run build 중에 발생한 에러들

0

383

1

서버 실행하고 브라우저로 들어갔을때 404에러

0

338

2

css 서버사이드 랜더링이 적용되지 않아서 문의 드립니다.

0

289

1

팔로워 3명씩 불러오고 데이터 합쳐주는걸로 바꾸고 서버요청을 무한으로하고있습니다.

0

242

2

해시태그 검색에서 throttle에 관해 질문있습니다.

0

202

1