React 강좌) trendy React 2-4. useMemo 알아보기

Danuel·2019년 4월 18일
5

trendy React

목록 보기
14/21
post-thumbnail

이번 편에서는 퍼포먼스 최적화와 가독성에 도움을 주는 useMemo를 알아보겠습니다.

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를 변경하는 함수를 제공하지 않습니다.

  • 2번째 파라미터를 전달하지 않으면 State가 바뀔 때 마다 1번째 파라미터로 전달한 함수를 항상 실행하기 때문에 주의해야 합니다.
profile
다뉴하는 코딩

5개의 댓글

comment-user-thumbnail
2019년 4월 18일

좋아요와 댓글 감사합니다.
오탈자, 질문 등은 언제든지 댓글로 달아주세요!

답글 달기
comment-user-thumbnail
2019년 4월 18일

감사합니다. 글 잘보았습니다~ 질문이 하나 있습니다.
마지막 예제에서 useMemo의 반환값을 담는 부분이 그럼 이렇게 되어야 하는 건가요?
const nicknameLength = useMemo(() => nickname.length, [nickname])

1개의 답글
comment-user-thumbnail
2020년 3월 3일
답글 달기
comment-user-thumbnail
2020년 7월 22일

너무 좋습니다

답글 달기