Suspense 관련해서 질문드립니다
안녕하세요.
유익한 강의 너무 잘 듣고 있습니다.
다름이 아니라, 팩토리 패턴으로 리팩토링 한 코드에 대해 질문이 있어서 글을 적게 되었습니다.
lazy를 사용하지 않고 import('') 구문 만으로는 동적으로 모듈을 임포트 할 수 없나요??
컴포넌트가 모두 마운트 된 후 레이지 컴포넌트가 동적으로 임포트가 모두 완료된 상태인데도 suspense가 꼭 필요하나요?? 레이지 컴포넌트에 접근할 땐 이미 임포트가 완료된 후라는 생각이 들어서 여쭤봅니다!
回答 1
2
안녕하세요, 정세연님.
[1]
import 함수는 Promise를 반환하는 비동기 함수입니다. import한 모듈을 인자로 받아서 처리하는 식으로 사용죠.
import { add } from './math'
console.log('1 + 4 =', add(1, 4))
//-------------------
import('add').then((module) => {
const { add } = module
console.log('1 + 4 =', add(1, 4))
})위 예시에서 위의 코드는 모듈을 정적 로딩을 한 경우고 아래는 동적 로딩을 한 경우입니다.
마찬가지로 단순히 컴포넌트를 동적으로 import 하면 Promise를 통해 컴포넌트 객체가 전달됩니다.
이때 리액트의 컴포넌트를 렌더링 할 때는 Promise를 통해 받아온 컴포넌트 객체를 Promise 밖으로 꺼내야 합니다.
이것을 도와주는 것이 바로 lazy 함수입니다.
정리하면, 동적 로딩은 import 함수만으로 충분합니다.
다만, 비동기한 컴포넌트 라이프사이클 내에서 동적 로딩한 컴포넌트를 제대로 전달받기 위해서는 lazy 함수를 사용해야 합니다.
물론, 본인이 lazy와 같은, Promise로 받은 컴포넌트 객체를 밖으로 빼는 함수를 직접 구현하셔도 됩니다.
(이것은 일반적인 API(비동기) 데이터를 로드하는 것과 비슷합니다.)
[2]
지연 로딩(lazy loading) 하는 경우, 사실 상 Suspense의 loading 분기를 타지 않을 겁니다.
다만, 지연 로딩되는 컴포넌트가 항상 미리 로드(import) 된다는 보장은 없습니다.
타이밍에 따라 제때 로드가 되지않아 바로 렌더링을 못할 수도 있습니다.
컴포넌트의 Preload가 완벽하게 보장된다면 상관없겠지만, 이런 경우는 드물기 때문에 Suspense를 항상 같이 써주시는게 좋습니다.
답변이 도움되셨길 바라며, 강의에 관심을 가져주셔서 감사합니다 :)
bundle analyzer 에 대한 질문이 있습니다.
0
108
2
Cannot find module serve 에러
1
104
1
성능 탭에서 소요시간이 안보입니다
0
205
2
이미지 CDN 만드는 방법
0
459
1
Performance FPS 탭이 안보여요.
1
798
1
CPU throttling이 뭔가요?
0
1119
1
default export가 아닌 named export일 때 lazy사용법
1
1070
1
lazy적용하였는데 네트워크탭에 분리하여 보이지 않습니다
1
583
1
network 캐싱에 대해서 질문 있습니다!
1
427
1
vue project에서 chrome performance tab 확인하기
1
458
1
node version으로 인한 오류
4
1232
1
강의 자막
1
956
2
번들파일과 병목현상 질문
2
396
1
webpack-bundle-analyzer 질문
1
786
1
이미지 프리로딩 질문
1
385
1
이미지 최적화 활용
1
582
1
강력 새로고침
1
323
1
config-overrides cant resolve path
1
362
1
이미지 preload 컴포넌트 preload 차이 질문드립니다.
1
611
1
custom react 환경에서 node_modules chunk 분리
1
381
1
removeSpeical 함수를 줄여야겠다고 하는 이유!
1
283
1
Factory pattern에 대해서 궁금한 점이 있습니다
2
367
2
텍스트 압축 방식에 대해 질문이 있습니다
2
952
1
최적화에 대해서 질문있습니다~~
1
344
1

