Nextjs Script컴포넌트
Nextjs Script컴포넌트란?
-
서버 및 클라이언트 모두에서 JavaScript 코드를 실행하고 데이터를 초기화하는데 사용되는 컴포넌트다.
(SSR, CSR 모두 적용 가능함) -
서버에서 데이터를 미리 가져와 클라이언트로 전달하거나, 클라이언트 측에서 라우팅 또는 페이지 진입시 특정 작업을 수행 할 수 있음
-
서버 사이드 데이터 로딩
: 페이지가 서버에서 처음 렌더링 될 때 데이터 초기화하는데 사용한다. -
클라이언트 사이드 데이터 로딩
: 페이지가 클라이언트에서 로딩될 때 특정 작업 수행하도록 설정 할 수 있다.
사용예시
import Script from 'next/script';
export default function Dashboard() {
return (
<>
<Script src="https://example.com/script.js" />
</>
);
}
이러면 저 script는 Dashboard라는 페이지 진입시 로드됨
주요 속성 정리
-
src : 로드할 스크립트 파일 경로 지정
EX) src="http://example.com/script"
-
strategy : 스크립트의 로드 전략 설정 (언제 로드/실행 하는지)
Ex) strategy="lazyOnload"
-
onLoad : 스크립트가 로드되면 실행할 함수 지정
Ex) onLoad ={onLoadFunc}
-
onReady : 스크립트가 준비되면 실행할 함수 지정
Ex) onReady ={onReadyFunc}
-
onError : 스크립트 로드 중에 오류가 발생할 때 실행할 함수 지정
Ex) onError={onErrorFunc}
Script: strategy 속성 더 살펴보기
-
스크립트의 로드 전략을 설정할 수 있는 옵션이다. 주로 스크립트가 언제 로드되고 실행할 지 지정한다.
-
다음 네가지 옵션이 있다.
-
afterInteractive(기본값): 스크립트가 페이지 상호 작용 가능한 후에 로드되고 실행됨
-
beforeInteractive: 스크립트가 페이지의 상호 작용 가능한 상태 이전에 로드되고 실행됨 (hydration 이전)
-
lazyOnLoad: 스크립트가 페이지가 완전히 로드된 후에 로드되고 실행됨 (브라우저 idle 타임에)
-
worker(experimental): Service Worker와 같은 백그라운드 워커 스크립트를 로드하고 실행하는데 사용 (오프라인 캐싱이나 알림등)
-
Script: onReady 속성과 onLoad속성 더 살펴보기
-
onLoad: 스크립트 파일이 브라우저에 성공적으로 로드될 때 호출된다.
- 스크립트 파일에 추가적인 초기화 작업이 필요한 경우, onLoad를 사용해서 수행가능하다.
- beforeInteractive과는 사용 불가함.(onReady 사용권장)
-
onReady: 스크립트 파일이 브라우저에 로드되고,스크립트 내 모든 작업이 완료되었으며, 페이지가 상호 작용 가능한 상태가 될 때 호출된다.
- 스크립트가 완전히 초기화 되고, 페이지의 모든 요소 초기화 + 상호 작용 작업 완료된 후 호출됨
아래는 onReady의 예시코드인데, 해당 컴포넌트가 완전히 마운트 된 후에 구글맵을 다시 인스턴트화하는 코드이다.
<Script
id="google-maps"
src="https://maps.googleapis.com/maps/api/js"
onReady={() => {
new google.maps.Map(mapRef.current, { center: { lat: -34.397, lng: 150.644 } }, (zoom: 8));
}}
/>