4.useRef & Custom hook

useRef

Hook의 κ·œμΉ™

React의 Custom HooksλŠ” ꡬ성 μš”μ†Œμ—μ„œ μž¬μ‚¬μš© κ°€λŠ₯ν•œ 논리λ₯Ό μΆ”μΆœν•˜κ³  μ—¬λŸ¬ ꡬ성 μš”μ†Œ 간에 κ³΅μœ ν•  수 μžˆλŠ” κΈ°λŠ₯이닀. λ‹€μŒμ€ μ‚¬μš©μž 지정 후크λ₯Ό λ§Œλ“€ λ•Œ 염두에 두어야 ν•  λͺ‡ 가지 일반적인 κ·œμΉ™μ΄λ‹€.

  1. ν•¨μˆ˜ 이름을 'use'둜 μ‹œμž‘ν•΄μ•Ό ν•œλ‹€. κ·œμΉ™μ— 따라 React의 λͺ¨λ“  μ‚¬μš©μž 지정 ν›„ν¬λŠ” 'use'λΌλŠ” λ‹¨μ–΄λ‘œ μ‹œμž‘ν•΄μ•Ό ν•œλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ λ‹€λ₯Έ κ°œλ°œμžκ°€ ν•΄λ‹Ή ν•¨μˆ˜κ°€ ν›„ν¬λ‘œ μ‚¬μš©λœλ‹€λŠ” 것을 μ•Œ 수 있기 λ•Œλ¬Έμ΄λ‹€.

  2. μ‚¬μš©μž μ •μ˜ 후크 λ‚΄μ—μ„œ λ‹€λ₯Έ 후크 μ‚¬μš©: μ‚¬μš©μž μ •μ˜ ν›„ν¬λŠ” ꡬ성 κ°€λŠ₯ν•˜λ„λ‘ λ˜μ–΄ μžˆμœΌλ―€λ‘œ μ‚¬μš©μž μ •μ˜ 후크 λ‚΄μ—μ„œ useState, useEffect 및 useContext와 같은 λ‹€λ₯Έ 후크λ₯Ό 자유둭게 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

  3. μ‚¬μš©μž 지정 ν›„ν¬μ˜ μ΅œμƒμœ„ μˆ˜μ€€μ—μ„œλ§Œ 후크 호좜: ν›„ν¬λŠ” λ‚΄λΆ€ 루프, 쑰건 λ˜λŠ” 쀑첩 ν•¨μˆ˜κ°€ μ•„λ‹Œ ꡬ성 μš”μ†Œ λ˜λŠ” μ‚¬μš©μž 지정 ν›„ν¬μ˜ μ΅œμƒμœ„ μˆ˜μ€€μ—μ„œλ§Œ ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€. 즉, μ—¬λŸ¬ 번 호좜될 수 μžˆλŠ” 콜백 λ˜λŠ” 이벀트 ν•Έλ“€λŸ¬ λ‚΄μ—μ„œ 후크λ₯Ό ν˜ΈμΆœν•΄μ„œλŠ” μ•ˆ λœλ‹€.

  4. λ°°μ—΄ λ˜λŠ” 개체 λ°˜ν™˜: μ‚¬μš©μž 지정 ν›„ν¬λŠ” 항상 λ°°μ—΄ λ˜λŠ” 개체λ₯Ό λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ 후크λ₯Ό μ‚¬μš©ν•˜λŠ” ꡬ성 μš”μ†Œμ—μ„œ 값을 μ‰½κ²Œ λΆ„ν•΄ν•˜κ³  μ‚¬μš©ν•  수 있기 λ•Œλ¬Έμ΄λ‹€.

  5. μ‚¬μš©μž 지정 후크 λ¬Έμ„œν™”: μ½”λ“œμ˜ λ‹€λ₯Έ ν•¨μˆ˜λ‚˜ ꡬ성 μš”μ†Œμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ μ‚¬μš©μž 지정 후크λ₯Ό λͺ…ν™•ν•œ μ£Όμ„μœΌλ‘œ λ¬Έμ„œν™”ν•˜κ³  κΈ°λŠ₯, μ‚¬μš© 방법, 맀개 λ³€μˆ˜ λ˜λŠ” λ°˜ν™˜ 값을 μ„€λͺ…ν•˜λŠ” 것이 μ€‘μš”ν•œλ‹€.

  6. μ‚¬μš©μž 지정 후크 ν…ŒμŠ€νŠΈ: μ‚¬μš©μž 지정 후크λ₯Ό μ² μ €νžˆ ν…ŒμŠ€νŠΈν•˜μ—¬ μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•˜κ³  극단적인 κ²½μš°λ‚˜ 예기치 μ•Šμ€ μž…λ ₯을 μ²˜λ¦¬ν•˜λŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€.

usehooks-ts의 useBoolean μ»€μŠ€ν…€ ν›…

import { Dispatch, SetStateAction, useCallback, useState } from 'react'

interface UseBooleanOutput {
  value: boolean
  setValue: Dispatch<SetStateAction<boolean>>
  setTrue: () => void
  setFalse: () => void
  toggle: () => void
}

function useBoolean(defaultValue?: boolean): UseBooleanOutput {
  const [value, setValue] = useState(!!defaultValue)

  const setTrue = useCallback(() => setValue(true), [])
  const setFalse = useCallback(() => setValue(false), [])
  const toggle = useCallback(() => setValue(x => !x), [])

  return { value, setValue, setTrue, setFalse, toggle }
}

export default useBoolean

μ‚¬μš©

import { useBoolean } from 'usehooks-ts'

export default function Component() {
  const { value, setValue, setTrue, setFalse, toggle } = useBoolean(false)

  // Just an example to use "setValue"
  const customToggle = () => setValue((x: boolean) => !x)

  return (
    <>
      <p>
        Value is <code>{value.toString()}</code>
      </p>
      <button onClick={setTrue}>set true</button>
      <button onClick={setFalse}>set false</button>
      <button onClick={toggle}>toggle</button>
      <button onClick={customToggle}>custom toggle</button>
    </>
  )
}

Reference

Last updated