React.lazy 컴포넌트는 실행되지 않는 건가요?
237
작성한 질문수 2
호버시에 동적으로 import를 하는 방식을 사용할때,
코드 최상단에는 ImageModal import 구문을 포함한 콜백함수가 React.lazy의 인수로 들어가 있습니다.
그렇다면 호버시에 import를 한다면, 이때 ImageModal의 페이지를 import를 하고,
React.lazy로 된 컴포넌트(LazyImageModal)가 호출되었을때는, 이미 import가 호출되었다고 JS가 판단해서 lazy에 들어가있는 import 콜백함수는 호출되지 않는 프로세스 인건가요?
제가 헷갈려하는 부분은 React.lazy로 정의한 컴포넌트가 import를 호출할것 같은데
호버시때 미리 import한 값이 있어서, JS는 이미 import한 값이 있다고 판단해서 안가져 오는게 맞는지 궁금합니다.
그리고 아래의 코드는 왜 틀린 코드인지 궁금합니다 ㅠ
답변 1
5
안녕하세요 lex-kim 님,
동적 import 에 대해서 질문을 주셨는데요,
여기서 이해하셔야 할 것은 흔히 우리가 사용하고 있는 import 'module' 또는 import * from 'module' 이 아닌 import('module') 이 표현식입니다.
import('module') 는 빌드 시에 모듈을 import 하는 것이 아닌, 런타임 시에 동적으로 모듈을 import 하며, 실제 module를 바로 리턴하는게 아니라 해당 모듈을 담고 있는(resolve 하는) Promise 객체를 반환합니다. 동적으로 모듈을 가져도는 동작은 시간이 소요되는 동작이기 때문에 이걸 비동기로 처리하기 때문입니다.
즉, 다음과 같이 사용해야 됩니다.
하지만 여기서 저 module이 단순 유틸성 함수라면 상관없지만, 우리같이 컴포넌트라면 import가 된 시점에 setState 를 하여 React의 Render Cycle로 가져올 필요가 있겠죠?
그 과정을 쉽게 해주는 것이 React.lazy와 React.Suspense 입니다.
그리고 hover시 import를 해두면, 미리 해당 모듈을 네트워크를 통해 불러오게 되고 (사용하지는 않더라도)
다른 곳에서 lazy 안에서 import를 할 때는 이미 네트워크 상에서는 로드된 데이터를 바로 사용할 수 있으므로 시간이 단축됩니다.
답변이 도움되었기를 바라며, 강의에 관심을 가져주셔서 감사합니다.
bundle analyzer 에 대한 질문이 있습니다.
0
117
2
Cannot find module serve 에러
1
126
1
성능 탭에서 소요시간이 안보입니다
0
230
2
이미지 CDN 만드는 방법
0
474
1
Performance FPS 탭이 안보여요.
1
819
1
CPU throttling이 뭔가요?
0
1127
1
default export가 아닌 named export일 때 lazy사용법
1
1079
1
lazy적용하였는데 네트워크탭에 분리하여 보이지 않습니다
1
593
1
network 캐싱에 대해서 질문 있습니다!
1
429
1
vue project에서 chrome performance tab 확인하기
1
462
1
node version으로 인한 오류
4
1240
1
강의 자막
1
961
2
번들파일과 병목현상 질문
2
402
1
webpack-bundle-analyzer 질문
1
790
1
이미지 프리로딩 질문
1
389
1
이미지 최적화 활용
1
589
1
강력 새로고침
1
331
1
Suspense 관련해서 질문드립니다
2
364
1
config-overrides cant resolve path
1
368
1
이미지 preload 컴포넌트 preload 차이 질문드립니다.
1
617
1
custom react 환경에서 node_modules chunk 분리
1
384
1
removeSpeical 함수를 줄여야겠다고 하는 이유!
1
290
1
Factory pattern에 대해서 궁금한 점이 있습니다
2
377
2
텍스트 압축 방식에 대해 질문이 있습니다
2
959
1





