fast refresh는 react native의 기능으로 react 컴포넌트에서 변경 사항에 대해 거의 즉각적인 피드백을 제공해줍니다. fast refresh는 기본적으로 활성화되어 있으며 react native dev menu에서 enable fast refresh를 토글할 수 있습니다. fast refresh가 활성화되면 대부분의 수정 사항은 1~2초 내에 화면에 반영됩니다.
작동 원리
- react 컴포넌트만 내보내는 모듈을 수정하면, fast refresh는 해당 모듈의 코드만 업데이트하고 컴포넌트를 다시 렌더링합니다.
- react 컴포넌트가 아닌 것을 내보내는 모듈을 수정하면, fast refresh는 해당 모듈과 이를 가져오는 다른 모듈들도 다시 실행합니다. 예를 들어, Button.js와 Modal.js가 Theme.js를 가져오는 경우, Theme.js를 수정하면 두 컴포넌트가 모두 업데이트됩니다.
- react 트리 외부에서 모듈을 가져오는 파일을 수정하면, fast refresh는 전체 새로 고침을 수행합니다.
특징
- fast fresh는 함수 컴포넌트와 Hooks에서 react 로컬 상태를 유지합니다.
- 앱의 전체 재로딩을 피합니다.
- 때때로 상태를 초기화하고 컴포넌트를 다시 마운트하고 싶을 때 // @refresh reset을 추가하여 지시합니다.
fast refresh 이전의 옵션들
- live reloading: 파일에서 변경이 있을 때 전체 앱을 다시 로드하거나 새로고침
- hot reloading: 상태를 잃지 않고 변경된 파일만 새로 고칩니다.
오류 복원력
- fast refresh 세션 중에 구문 오류가 발생하면, 파일을 수정하고 다시 저장하면 빨간 박스가 사라집니다. 구문 오류가 있는 모듈은 실행되지 않으므로 앱을 새로 고칠 필요가 없습니다.
- 모듈 초기화 중 런타임 오류가 발생 후 수정해도 세션이 계속되어서 빨간 박스가 사라지고 모듈이 업데이트됩니다.
- 컴포넌트 내부에서 런타임 오류가 발생 후 수정해도 세션이 계속됩니다. react는 업데이트된 코드를 사용하여 애플리케션을 다시 로드합니다.
- 앱에 오류 경계가 있는 경우 빨간 박스 후에 다음 편집 시 렌더링을 다시 시도합니다. 이렇게 하면 항상 루트 앱 화면으로 돌아가는 것을 방지할 수 있습니다.
제한 사항
- fast refresh는 편집 중인 컴포넌트의 로컬 react 상태를 안전한 경우에만 유지하려고 합니다. 파일 편집 시 로컬 상태가 매번 초기화되는 이유는 다음과 같습니다.
- 클래스 컴포넌트의 로컬 상태는 유지되지 않습니다.
- 편집 중인 모듈이 react 컴포넌트 외의 다른 내보내기를 가질 수 있습니다.
- createNavigationContainer과 같은 고차 컴포넌트를 호출하는 결과를 내보내는 모듈이 있습니다. 반환된 컴포넌트가 클래스인 경우 상태가 초기화됩니다.
fast refresh와 hooks
- 가능한 경우, fast refresh는 편집 간에 컴포넌트의 상태를 유지하려고 합니다. 특히 useState와 useRef는 인수나 hook 호출 순서를 변경하지 않는 한 이전 값을 유지합니다.
- 종속성이 있는 hooks(useEffect, useMemo, useCallback)는 fast refresh 중 항상 업데이트됩니다. fast refresh가 진행 중일 때 종속성 목록이 무시됩니다. 예를 들어 useMemo(() => x * 2,[x])를 2를 10으로 수정하면 x가 변경되지 않았더라도 다시 실행됩니다.
'React Native' 카테고리의 다른 글
[React Native] 라이브러리 사용하기 (0) | 2024.06.26 |
---|---|
[React Native] Metro란 (0) | 2024.06.26 |
[React Native] 핸드폰(device)에서 실행하는법 (0) | 2024.06.26 |
[React Native] Android(java) 앱 통합하기(합치기) (0) | 2024.06.26 |
[React Native] Window에서 Android 환경 설정 시작하기 (0) | 2024.06.24 |