4.useRef & Custom hook
useRef
Hook์ ๊ท์น
React์ Custom Hooks๋ ๊ตฌ์ฑ ์์์์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ ผ๋ฆฌ๋ฅผ ์ถ์ถํ๊ณ ์ฌ๋ฌ ๊ตฌ์ฑ ์์ ๊ฐ์ ๊ณต์ ํ ์ ์๋ ๊ธฐ๋ฅ์ด๋ค. ๋ค์์ ์ฌ์ฉ์ ์ง์ ํํฌ๋ฅผ ๋ง๋ค ๋ ์ผ๋์ ๋์ด์ผ ํ ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ๊ท์น์ด๋ค.
ํจ์ ์ด๋ฆ์ 'use'๋ก ์์ํด์ผ ํ๋ค. ๊ท์น์ ๋ฐ๋ผ React์ ๋ชจ๋ ์ฌ์ฉ์ ์ง์ ํํฌ๋ 'use'๋ผ๋ ๋จ์ด๋ก ์์ํด์ผ ํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ํด๋น ํจ์๊ฐ ํํฌ๋ก ์ฌ์ฉ๋๋ค๋ ๊ฒ์ ์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ฌ์ฉ์ ์ ์ ํํฌ ๋ด์์ ๋ค๋ฅธ ํํฌ ์ฌ์ฉ: ์ฌ์ฉ์ ์ ์ ํํฌ๋ ๊ตฌ์ฑ ๊ฐ๋ฅํ๋๋ก ๋์ด ์์ผ๋ฏ๋ก ์ฌ์ฉ์ ์ ์ ํํฌ ๋ด์์ useState, useEffect ๋ฐ useContext์ ๊ฐ์ ๋ค๋ฅธ ํํฌ๋ฅผ ์์ ๋กญ๊ฒ ์ฌ์ฉํด์ผ ํ๋ค.
์ฌ์ฉ์ ์ง์ ํํฌ์ ์ต์์ ์์ค์์๋ง ํํฌ ํธ์ถ: ํํฌ๋ ๋ด๋ถ ๋ฃจํ, ์กฐ๊ฑด ๋๋ ์ค์ฒฉ ํจ์๊ฐ ์๋ ๊ตฌ์ฑ ์์ ๋๋ ์ฌ์ฉ์ ์ง์ ํํฌ์ ์ต์์ ์์ค์์๋ง ํธ์ถํด์ผ ํ๋ค. ์ฆ, ์ฌ๋ฌ ๋ฒ ํธ์ถ๋ ์ ์๋ ์ฝ๋ฐฑ ๋๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ด์์ ํํฌ๋ฅผ ํธ์ถํด์๋ ์ ๋๋ค.
๋ฐฐ์ด ๋๋ ๊ฐ์ฒด ๋ฐํ: ์ฌ์ฉ์ ์ง์ ํํฌ๋ ํญ์ ๋ฐฐ์ด ๋๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํด์ผ ํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํํฌ๋ฅผ ์ฌ์ฉํ๋ ๊ตฌ์ฑ ์์์์ ๊ฐ์ ์ฝ๊ฒ ๋ถํดํ๊ณ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ฌ์ฉ์ ์ง์ ํํฌ ๋ฌธ์ํ: ์ฝ๋์ ๋ค๋ฅธ ํจ์๋ ๊ตฌ์ฑ ์์์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฌ์ฉ์ ์ง์ ํํฌ๋ฅผ ๋ช ํํ ์ฃผ์์ผ๋ก ๋ฌธ์ํํ๊ณ ๊ธฐ๋ฅ, ์ฌ์ฉ ๋ฐฉ๋ฒ, ๋งค๊ฐ ๋ณ์ ๋๋ ๋ฐํ ๊ฐ์ ์ค๋ช ํ๋ ๊ฒ์ด ์ค์ํ๋ค.
์ฌ์ฉ์ ์ง์ ํํฌ ํ ์คํธ: ์ฌ์ฉ์ ์ง์ ํํฌ๋ฅผ ์ฒ ์ ํ ํ ์คํธํ์ฌ ์์๋๋ก ์๋ํ๊ณ ๊ทน๋จ์ ์ธ ๊ฒฝ์ฐ๋ ์๊ธฐ์น ์์ ์ ๋ ฅ์ ์ฒ๋ฆฌํ๋์ง ํ์ธํ์ญ์์ค.
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