Fast Refresh는 React 컴포넌트 수정에 대한 즉각적인 피드백을 제공하는 Next.js 기능입니다.
Fast Refresh
React Component를 export하는 파일을 수정한다면, Fast Refresh는 그 파일에 있는 코드를 업데이트하고 re-render합니다.
파일 내에 style, render logic, event handler, effect등 어떤 것을 수정하더라도 Fast Refresh할 것입니다.
Fast Refresh
React Component를 export하지 않는 파일을 수정한다면, Fast Refresh는 그 파일과 그 파일을 import하는 파일 모두를 re-run합니다.
Full Reload
React tree 외부 파일에서 가져온 파일을 수정한다면, Fast Refresh는 full reload로 대체됩니다.
React Component를 render는 하지만 non-React component에서 가져온 값들을 export는 하는 파일을 가질수도 있습니다.
예를 들어,
상수를 export하는 component가 있습니다.
그 component를 non-React utility 파일에서 import한다고 생각해봅시다.
이런 경우, 상수를 component와는 별도의 파일로 만들고
각 두 파일을 별도로 가져 오는 것을 고려하세요.
이렇게하면 Fast Refresh가 다시 활성화됩니다. 다른 경우는 일반적으로 비슷한 방법으로 해결할 수 있습니다.
에러처리 유연성
syntax error가 발생했을 경우 app이 동작하지 않습니다.
그러나 그것을 고치고 저장한다면 app을 reload할 필요는 없습니다.
자동으로 Fast Refresh 될 것입니다.
런타임 오류로 이어지는 실수를 한 경우 상황 별 오버레이가 표시됩니다.
error를 수정하면 app을 reload하는 것 없이 overlay가 없어지고 정상동작합니다.
Rendering중에 오류가 발생하지 않은 경우 component state는 유지됩니다.
그러나 오류가 발생한다면, 수정 후 updated code가 반영된 react component를 다시 mount 합니다.
기본적으로 Fast Refresh는 수정 진행중인 component의 state를 유지하기 위해 노력합니다. 그러나 수정 중에 state가 재 설정되는 경우를 보게되는데 그 경우는 아래와 같습니다.
HOC
를 사용한 component일 경우HOC
결과값이 class component일 경우에 해당됩니다.)export default () => <div />
와 같은 anonymous arrow function일 경우// @refresh reset
을 사용하세요console.log
or debugger;
를 개발 진행 중에 사용할 수 있습니다.기본적으로 state를 유지합니다.
특히, useState
useRef
는 argument를 변경하거나, hook call순서를 변경하지 않는 한 이전 state값을 유지합니다.
dependency을 가진 hook(useEffect
useMemo
useCallback
)은 항상 Fast Refresh 동안에 업데이트 됩니다.
변경전:
useMemo(() => x * 2, [x])
변경후:useMemo(() => x * 10, [x])
x가 변경되지 않은 경우에도 Fast Refresh에 의해 다시 실행됩니다.