inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

swr 사용해보기

swr을 쓰면 컴포넌트 랜더링 플로우가 어떻게 되나요?

409

한수빈

작성한 질문수 9

0

일단 프로필 컴포넌트 안에서 콘솔 로그 찍어봤는데 

followersData, followingsData를 마치 await해서 받은 다음

한 번에 랜더링 되더라고요.

근데 강의 내용중에 { data, error }가 둘 다 없으면 로딩중이라 하셨는데 

그럼 순서가 

swr get request -> render ->  swr get success -> render

이렇게 작동된다는 건가요?

Next.js nodejs redux react express

답변 1

1

제로초(조현영)

네 원래는 로딩중, 로딩완료 이렇게 두 번 렌더링됩니다. 다만 next의 ssr이랑 같이 합쳐두었을 경우 데이터는 이미 불러온 상태이므로 로딩완료 한 번만 렌더링됩니다.

0

한수빈

getServerSideProps를 export한 페이지에서는 useSWR훅도 ssr로 작동한다는 말씀인가요?

0

제로초(조현영)

useSWR에 옵션으로 initialData를 주면 ssr로 작동합니다.

0

한수빈

initialData를 주지 않고 url, fetcher만 인자로 넘겼는데도 콘솔이 한 번만 찍힌 이유는 무엇 때문이죠?

0

제로초(조현영)

저도 모르겠네요 console을 어디다 찍으셨는데요?

0

한수빈

profile 컴포넌트 안에서 찍었습니다.

const Profile = () => {
    const { data, error } = useSWR(url, fetcher);
    console.log('profile render: ', data, error);
   ...
  return <div>프로필</div>;
}

이런식으로요

0

제로초(조현영)

fetcher 내부에 콘솔로그를 찍고, 만약에 그 콘솔로그가 프론트 브라우저 말고도 프론트 서버에 찍힌다면 fetcher도 서버에서 실행되어서 결과가 나타난 것입니다. 서버에 없다면 브라우저에서 렌더링된 것입니다.

0

한수빈

넥스트가 기본적으로 ssr을 진행하면서 useSWR을 서버단에서 실행해줬단 말씀인가요?

0

제로초(조현영)

넥스트가 ssr을 위해서 컴포넌트를 한 번 실행하니까 그 때 useSWR도 한 번 실행되긴 합니다.

0

한수빈

왜 그런 건지 알아냈어요.

처음 profile 페이지로 이동하면 많이 찍히는데

그 이후에는 swr이 같은 url 에 대해서 캐싱을 해놓는 듯합니다.
근데 두 번 찍히긴 하네요. 어제 한 번 찍혔다는 건 제 착각인가 봐요.

const useSWR = (url, fetcher) => {
    const [data, setData] = useState();
    const [error, setError] = useState();

    useEffect(() => {
        fetcher(url).then(setData).catch(setError);
    }, [url]);

    return { data, error };
};

swr을 대충 이런 커스텀 훅으로 이해하면 될까요?

처음엔 empty data, empty error를 리턴하고 
이벤트 루프가 promise가 done된 테스크를 stack에 올릴 때
setData를 실행해서 data를 갱신한 다음 profile 컴포넌트를 리랜더링하고
다시 호출된 swr은 갱신된 data를 리턴하는 식으로요.
url이 달라질 때마다 새로 가져오구요.

0

제로초(조현영)

네 맞습니다. 저기 useEffect에 추가적으로 주기적으로 재요청한다든가의 로직이 추가되는 개념입니다. 실제 구현은 다양한 옵션들로 인해 훨씬 복잡해졌지만요.

https://github.com/vercel/swr/blob/master/src/use-swr.ts

넥스트 버젼 질문

0

90

2

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

0

104

1

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

0

192

1

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

0

116

2

createGlobalStyle의 위치와 영향범위

0

102

2

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

0

98

2

vsc 에서 npm init 설치시 오류

0

157

2

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

0

166

1

화면 새로고침 문의

0

129

1

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

0

160

2

Next 14 사용해도 될까요?

0

455

1

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

0

359

1

url 오류 질문있습니다

0

214

1

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

0

391

1

sudo certbot --nginx 에러

0

1293

2

Minified React error 콘솔에러 (hydrate)

0

477

1

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

0

255

1

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

0

337

1

npm run build 에러

0

525

1

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

0

399

1

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

0

350

2

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

0

290

1

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

0

249

2

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

0

206

1