이번 편에서는 퍼포먼스 최적화와 가독성에 도움을 주는 useMemo를 알아보겠습니다.
import React, { useEffect, useState } from 'react'
const User = () => {
const [nickname, setNickname] = useState('')
const [nicknameLength, setNicknameLength] = useState(0)
const updateNicknameLength = () => {
setNicknameLength(nickname.length)
}
useEffect(updateNicknameLength, [nickname])
const updateNickname = event => {
const nickname = event.target.value
setNickname(nickname)
}
return (
<div>
<input onChange={updateNickname} />
<label>{nicknameLength}</label>
</div>
)
}
nickname을 변경하면 그것을 자동으로 nicknameLength를 업데이트하는 컴포넌트입니다.
이와 비슷한 형태로 작성하는 경우는 꽤 많지만, 기능에 비해서 코드가 번잡한 느낌입니다. useEffect는 업데이트가 끝난 이후에 작동하기 때문에 한 번 더 업데이트를 한다는 이슈도 있으므로 퍼포먼스가 중요하다면 더 나은 방법이 필요합니다.
import React, { useMemo, useState } from 'react'
const User = () => {
const [nickname, setNickname] = useState('')
const nicknameLength = useMemo(() => nickname.length, [nickname])
const updateNickname = event => {
const nickname = event.target.value
setNickname(nickname)
}
return (
<div>
<input onChange={updateNickname} />
<label>{nicknameLength}</label>
</div>
)
}
useMemo 함수를 사용하면 깔끔하게 작성할 수 있습니다.
useEffect처럼 2번째 파라미터에 전달한 배열이 이전의 배열과 다르면 1번쨰 파라미터가 발동하며, useState와는 다르게 해당 State를 변경하는 함수를 제공하지 않습니다.
좋아요와 댓글 감사합니다.
오탈자, 질문 등은 언제든지 댓글로 달아주세요!