Next.js에서 클라이언트 측 구성 요소("클라이언트 사용")가 SSR(서버 측 렌더링)과 작동하는 방식이 때때로 혼란스러울 수 있습니다. 분석해 보겠습니다.
Next.js에서 클라이언트 및 서버 구성 요소가 작동하는 방식:
-
서버 구성 요소: 이는 Next.js의 기본값이며 서버에서 미리 렌더링됩니다. JavaScript로 클라이언트에 전송되지 않고 HTML로만 전송됩니다.
-
클라이언트 구성 요소: 구성 요소에 "클라이언트 사용"으로 표시하면 해당 구성 요소에 상호 작용(예: useState, useEffect)이 있을 수 있으므로 클라이언트 측에서 실행해야 함을 의미합니다. 또는 서버 환경에서 작동하지 않는 브라우저 API에 의존합니다.
클라이언트 구성 요소가 여전히 서버에서 HTML을 렌더링하는 이유:
구성 요소가 "클라이언트 사용"으로 표시되어 있더라도 해당 구성 요소의 초기 HTML은 서버(SSR)에서 생성될 수 있지만 정적 HTML 목적으로만 사용할 수 있습니다. . 이는 다음을 의미합니다.
-
초기 렌더링: 서버는 더 나은 성능과 SEO를 위해 클라이언트 구성 요소를 포함하여 페이지에 대한 HTML을 생성합니다. 이는 대화형이 아닌 정적 HTML입니다.
-
수화: 이 HTML이 브라우저에 도달하면 Next.js는 JavaScript로 클라이언트 측 구성 요소를 수화하여 상호 작용을 활성화합니다.
이런 일이 발생하는 이유:
-
성능: 초기 HTML을 서버 렌더링함으로써 사용자는 클라이언트 측 JavaScript가 로드될 때까지 기다리지 않고도 콘텐츠를 더 빠르게(첫 번째 바이트까지의 시간(TTFB) 더 빠르게) 볼 수 있습니다.
-
SEO: HTML을 사전 렌더링하는 것은 검색 엔진이 콘텐츠를 크롤링하고 색인을 생성할 수 있도록 보장하므로 SEO에 중요합니다.
-
수화: HTML이 제공되면 Next.js는 정적 HTML을 "수화"하여 이벤트 리스너를 연결하고 대화형으로 만드는 JavaScript 번들을 클라이언트에 보냅니다.
"클라이언트 사용"은 어떻게 되나요?
-
서버 측 HTML 렌더링: 구성 요소가 클라이언트 측이더라도 Next.js는 여전히 초기 보기에 대한 HTML을 생성합니다. 따라서 서버에서 대화형 JavaScript를 실행하지 않지만 클라이언트에 HTML 마크업을 보냅니다.
-
클라이언트측 하이드레이션: 상호작용에 필요한 JavaScript가 클라이언트로 전송되고, 페이지가 로드되면 Next.js가 구성요소를 하이드레이션하여 완벽하게 작동하도록 만듭니다.
오인:
구성요소에 "클라이언트 사용"을 표시한다고 해서 서버측 HTML이 생성되지 않는다는 의미는 아닙니다. 이는 단순히 대화형 JavaScript가 클라이언트에만 로드되지만 서버는 여전히 렌더링을 위한 초기 정적 HTML을 생성할 수 있음을 의미합니다.
요약하자면:
-
클라이언트 구성 요소의 SSR: 클라이언트 구성 요소의 HTML은 서버에서 사전 렌더링될 수 있지만(초기 로드용) 클라이언트에서 수화될 때까지는 대화형이 아닙니다.
-
"클라이언트 사용": 이 지시문은 클라이언트 측 상호 작용을 위한 JavaScript가 브라우저에서만 실행되도록 보장하지만 서버에서 정적 HTML 생성을 중지하지는 않습니다.
구성 요소가 다르게 동작하도록 하려면 특정 동적 콘텐츠를 로드하는 위치와 방법을 다시 생각해야 할 수 있습니다. 특히 클라이언트별 동작(예: 창 또는 문서 액세스)이 필요한 경우 더욱 그렇습니다.
위 내용은 클라이언트 구성 요소가 nextjs에서 SSR로 렌더링되는 이유는 무엇입니까? 구성 요소를 \'클라이언트 사용\'으로 표시하면 HTML이 여전히 SSR로 렌더링되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!