[React Native][공식Guide번역]Fast Refresh
[React Native][공식Guide번역]Fast Refresh
Fast Refresh
Fast Refresh는 리액트 프로젝트의 컴포넌트가 변할때 즉각적인 반응을 얻을 수 있는 리액트 네이티브의 기본 기능이며, Fast Refresh 기능이 활성화 되면 프로젝트내의 대부분의 수정내용이 1~2초 내에 변경사항이 적용된다.
Fast Refresh 기능은 기본적으로 적용되어 있으며, React Native Developer 메뉴에서 Enable Fast Refresh로 사용/미사용을 선택 가능하다.
작동 방식
- 프로젝트의 리액트 Component만 수정하는 경우 (styles, 렌더링 로직, 이벤트 핸들러, effects등도 포함) Fast Refresh 기능은 해당 수정 부분에 대해서만 코드를 업데이트한다.
- 프로젝트에 import된 모듈을 편집하는 경우 Fast Refresh는 해당 부분과 이를 가져오는 모든 부분을 다시 실행한다.
Button.js와 Modal.js 가 Theme.js를 사용한다고 가정하면 Theme.js를 편집하면 Button.js, Modal.js 모두 업데이트 된다.
- 마지막으로 리액트 트리에 속하지 않은 모듈을 편집하는 경우에는 전체새로 고침이 적용 될 것입니다.
에러 복원
- Fast Refresh 중 구문 에러가 발생하는 경우 해당 부분을 수정 후 파일을 다시 저장하면 프로젝트를 재 실행하지 않아도 에러는 사라지고 프로젝트는 실행된다.
- 모듈의 초기화 과정에서 런타임 에러가 발생하는 경우 Fast Refresh가 계속해서 동작하고 있으므로 에러를 실행하면 프로젝트가 정상적으로 업데이트 된다.
- 마찬가지로 구성 요소의 내부에서 런타임 에러가 발생하는 경우에도 Fast Refresh는 업데이트된 코드를 사용해 프로젝트를 다시 동작 시킵니다.
- error boundaries(React 16에서 새로 추가된 개념으로 잘못된 코드가 있는경우 해당 화면에 접근시 앱이 강제종료가 되는걸 방지하기 위해 추가된 개념 정도로 보입니다.)가 있는 경우 에러 이후에 다시 편집된 코드에 렌더링을 시도합니다. 하지만 이는 너무 세밀한 부분까지는 동작하지 못하므로 반드시 이를 명심하고 프로젝트를 설계해야 합니다.
한계
Fast Refresh 기능은 state을 유지한채 새로고침을 수행하려고 하지만 이는 상황이 안전할때 만입니다. 다음 경우와 같이 state이 재설정되는 상황이 있습니다.
- Class형으로 작성된 컴포넌트에는 state이 보존되지 않습니다.(Funtion형으로 작성되거나 Hooks로 작성된 상황에서만 보존.)
- 수정중인 모듈 에서는 다른 컴포넌트에 영향을 받아 state이 유지 되지 않을 수 있습니다.
- 화면을 호출하는 상위의 컴포넌트(예 : createNavigationContainer(MyScreen)와 같은)의 반환값이 클래스인 경우 state이 유지되지 않습니다.
장기적으로 봤을때, funtion 혹은 Hooks 기반으로 작성된 프로젝트가 더 안정적으로 state을 유지합니다.
Tips
- React 의 Fast Refresh 기능은 Funtion 및 Hooks 사용 시 state값을 유지합니다.
- Fast Refresh가 사용되더라도 강제로 state값을 초기화 하고싶은 경우 편집중인 파일 아무 곳에서나 //@refresh 를 추가하여 강제로 초기화 시킬 수 있습니다.
- Fast Refresh 의 세션 중에도 console.log 와 debugger를 활용할 수 있습니다.
해당 글은 https://reactnative.dev/docs/fast-refresh 글을 번역한 것으로 오역이 있을수도 있습니다.
from http://eodevelop.tistory.com/72 by ccl(A) rewrite - 2020-03-12 09:54:13
댓글
댓글 쓰기