useCallback은 함수를 메모이제이션(memoization)하기 위해서 사용되는 hook 함수이다.
const onSubmit = useCallback(
(e) => { ★
e.preventDefault(); ★
console.log(email, nickname, password,, passwordCheck); ★
},
[email, nickname, password, passwordCheck], ☆
)
☆(deps)에는 ★(함수)안에서 사용하는 변수들을 다 넣어줘야 한다. 그래야 지만 ★(함수) 안에 있는 값들이 업데이트된다.
useCallback 자체가 ★(함수)를 캐싱해둬라(기억해둬라)이다. 언제까지 기억하냐면 ☆(deps)값들 중에 하나라도 바뀔 때까지.
하나라도 바뀌면 ★(함수)를 새로 만들고 바뀌는 게 없으면 이전 함수를 계속 쓴다.
특성
클래스에서는 필요 없는데 함수에서는 매번 전체가 재실행되기 때문에 useCallback으로 감싸지 않으면 ★(함수)들이 매번 재생성된다. 이것을 막기 위함이다.
그러나
리 렌더링이 많이 일어난다고 해서 성능에 크게 영향을 미치지 않으나 디버깅하기가 어려워진다.
useCallback으로 안 감싸도 동작은 하지만 매번 함수가 새로 생기면 밑에 예제를 보면 onChange에 들어가는 것이 매번 새로운 함수가 들어간다. 그러면서 리 렌더링이 발생한다. (그러나 리렌더링이 발생한다 하더라도 실제로는 화면을 다시 그리는 것은 아니다.)
...
<Label id="nickname-label">
<span>닉네임</span>
<div>
<Input type="text" id="nickname" name="nickname" value={nickname} onChange={onChangeNickname} />
</div>
</Label>
<Label id="password-label">
<span>비밀번호</span>
<div>
<Input type="password" id="password" name="password" value={password} onChange={onChangePassword} />
</div>
</Label>
...
'프레임워크 > React' 카테고리의 다른 글
[React] SWR 설정 (0) | 2021.06.26 |
---|---|
[React] SWR (0) | 2021.06.25 |
[React] CORS로 인한 proxy 설정 그리고 axios요청보내기 (0) | 2021.06.25 |
[React] emotion을 중점으로한 다양한 css 적용법 (0) | 2021.06.24 |
[React] 코드 스프리팅(code splitting) (0) | 2021.06.24 |