inflearn logo
강의

Course

Instructor

Getting Started with Next.js (feat. Map Service Development)

CSR

dynamic에 대한 질문

Resolved

447

jaehyeonlim

28 asked

1

NoSSR도 useEffect와 같이 실행되는 건가요?

 

선생님 안녕하세요. 좋은강의 너무 잘 듣고있습니다. 감사합니다.


윈도우 크기를 변경했을 때, width의 값이 같이 변경되는게 신기해서 질문드립니다.

useEffect안의 math.random()의 값이 변경되는 타이밍에 window의 width값도 같이 변경되더라구요.

제 생각에는, 랜덤값이야 useEffect안에서 setData를 통해 계속 바꿔주고 있으니 변경되는게 맞다고 생각했지만, window값은 처음 값을 받아오면 새로고침을 해주기 전까지는 값이 변경되지 않을줄 알았거든요. 그런데 랜덤값이 변경될 때 값이 같이 변경되더라구요.

그래서 혹시 이게 dynamic이 useEffect와 같은 역할을 한다면, window크기를 변경할 때마다 width의 값이 바로바로 바껴야 할 텐데, 그건 또 아니고 랜덤값이 바뀔때 같이 바뀌니까, 이게 어떤식으로 실행되는건지 알고싶어서 질문드립니다.

 

import { NextPage } from "next";
import dynamic from "next/dynamic";
import { useEffect, useState } from "react";
// import NoSSR from "@/components/section1/NoSSR";
const NoSSR = dynamic(() => import("@/components/section1/NoSSR"), {
  ssr: false,
});

const Example: NextPage = () => {
  const [data, setData] = useState(0);

  useEffect(() => {
    const delayInSeconds = 10;
    new Promise<number>((resolve) =>
      setTimeout(() => resolve(Math.random()), delayInSeconds * 1000)
    ).then((result) => setData(result));

    console.log("NoSSR : ", NoSSR);
  });

  return (
    <main>
      <h1>Client - Side data fetching</h1>
      <p>값 : {data}</p>
      <NoSSR />
    </main>
  );
};

export default Example;

위 코드는 강의 보면서 따라치고, 궁금해서 로그를 찍어본 코드입니다. 딜레이를 10초로 주고, 그 안에서 윈도우 크기를 계속 바꿔봤는데, 윈도우 크기를 바꾼다고 해서 바로바로 변경되는 게 아니라, 10초가 지나고 랜덤값이 바뀔 때, 같이 바뀝니다.

seo next.js vercel csr ssg ssr

Answer 1

1

vroomfan

안녕하세요. 질문 감사합니다ㅎㅎ

결론부터 말하자면 React의 리렌더링 조건에 의해 발생하는 현상입니다.

const [data, setData] = useState(0);
...
new Promise<number>((resolve) =>
  setTimeout(() => resolve(Math.random()), delayInSeconds * 1000)
).then((result) => setData(result));
...
<main>
  ...
  <NoSSR />
</main>

위의 코드는 부모 컴포넌트입니다. setTimeout에서 주기적으로 컴포넌트의 상태(data)를 업데이트합니다(즉, 부모 컴포넌트가 리렌더링 됨). 그리고 React는 부모 컴포넌트가 렌더링되면 자식 컴포넌트도 리렌더링합니다. -> 자식 컴포넌트가 리렌더링되기 때문에 window.innerWidth도 다시 계산되어 화면이 업데이트됩니다.

감사합니다! :)

1

jaehyeonlim

아하, <NoSSR />이 자식컴포넌트라서 리렌더링 되는거라고 이해했는데 이게 맞을까요??
답변 정말 감사합니다!!!

1

vroomfan

넵 맞습니다. 감사합니다ㅎㅎ

API 라우터를 사용해야 하는 경우에 대해

1

150

1

키보드 어떤 거 사용하시나요

1

352

1

next.js 멀티플 런타임 관련해서 질문 올립니다..

1

358

2

아주 기초적인 질문입니다.

1

322

1

서버사이드 렌더링을 할 때, 서버는 어디에 있는 건가요?

1

1170

2

수업을 듣다가 SSR에 관하여..

1

551

2

interface 와 type

1

376

1

엘리맨트들의 자식관계가 어떻게 이렇게 되나 궁금합니다.

1

384

1

onLoad함수 (script태그의 onLoad X)

1

426

1

SSR vs SSG

1

476

2

NoSSR 관련한 질문입니다:)

1

376

1

a tag 질문 !

1

327

2

8분 20초 배포 관련

1

324

2

안녕하세요! 구글 서치 콘솔에 등록하는 도중 다음 오류가 뜹니다

0

2678

2

emotion styles 파일이 빌드시 경고로 뜹니다.

1

438

1

naver map 이 출력되지 않습니다.

1

481

1

페이지에 site맵 존재시 next Link는 csr 처럼 싹가져오게 되나요?

1

264

2

Failed to load resource: the server responded with a status of 404 ()

1

1034

2

VSCode 익스텐션 궁금합니다.

1

356

1

상태관리 질문 있습니다!

1

449

1

swr에 대한 질문입니다. (용어 관련)

1

372

1

swr 질문입니다!

1

337

1

안녕하세요. span 태그의 부모에 display: flex 를 적용하는데 왜 적용되는지 아무리 생각해도 이해가 되지 않아 질문드립니다.

1

679

2

naver로고 important 값 주는 이유

1

366

2