[๐Ÿ’ŽReact] useRef

h-a-n-aยท2023๋…„ 3์›” 25์ผ
1

๐Ÿ’ŽReact

๋ชฉ๋ก ๋ณด๊ธฐ
10/14

const ref = useRef(value)
useRef๋Š” ํฌ๊ฒŒ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€์˜ ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค.
์ฒซ ๋ฒˆ์งธ๋Š” ๋ณ€์ˆ˜ ๊ด€๋ฆฌ, ๋‘ ๋ฒˆ์งธ๋Š” DOM ์š”์†Œ ์ ‘๊ทผ.

๋ณ€์ˆ˜ ๊ด€๋ฆฌ

ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ useRef๋ฅผ ๋ถ€๋ฅด๋ฉด {current:value}๋กœ ์ƒ๊ธด ref ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค. useRef์˜ ์ธ์ž๋กœ ๋“ค์–ด๊ฐ„ value๋Š” ref ์˜ค๋ธŒ์ ํŠธ์˜ current ๊ฐ’์œผ๋กœ ์ €์žฅ๋œ๋‹ค. ๋ฐ˜ํ™˜๋œ ref๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ์ „์ƒ์• ์ฃผ๊ธฐ๋ฅผ ํ†ตํ•ด ์œ ์ง€๋œ๋‹ค. ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ณ„์† ๋ Œ๋”๋ง๋˜์–ด๋„, ์–ธ๋งˆ์šดํŠธ๋˜๊ธฐ ์ „๊นŒ์ง„ ๊ฐ’์„ ๊ณ„์† ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ณ€ํ™”๋Š” ๊ฐ์ง€ํ•˜์ง€๋งŒ, ๊ทธ ๋ณ€ํ™”๊ฐ€ ๋ Œ๋”๋ง์€ ์œ ๋ฐœํ•˜๊ฒŒ ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์„ ๋•Œ ๋น›์„ ๋ฐœํ•œ๋‹ค โœจ

DOM ์š”์†Œ ์ ‘๊ทผ

useRef๋Š” ref ๋ผ๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š”๋ฐ, ์ด ref๋ฅผ ์šฐ๋ฆฌ๊ฐ€ ์ ‘๊ทผํ•˜๊ณ ์ž ํ•˜๋Š” ์š”์†Œ ํƒœ๊ทธ์— ref ๋ผ๋Š” ์†์„ฑ์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.(ex. <input ref={ref}/> )
๋Œ€ํ‘œ์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์‹œ๋กœ๋Š”, ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€์—์„œ ๊ตณ์ด input์„ ํด๋ฆญํ•˜์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ focus ๋˜์–ด์žˆ์–ด ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ”๋กœ ํƒ€์ดํ•‘ํ•ด์ค„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋งˆ์น˜, ๋ฐ”๋‹๋ผ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ document.querySelector ๊ฐ™์€!

import React, { useRef, useEffect } from 'react'

function Login() {
    const inputRef = useRef()
    useEffect(() => {
        inputRef.current.focus()
    }, [])
    const onLogin = () => {
        alert(`์•ˆ๋…•ํ•˜์„ธ์š” ${inputRef.current.value}`)
    }
    const onEnter = (e) => {
        if (e.key === 'Enter') {
            onLogin()
        }
    }
    return (
        <div>
            <input ref={inputRef} type="text" placeholder="id๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”" onKeyDown={onEnter} />
            <button onClick={onLogin}>๋กœ๊ทธ์ธ</button>
        </div>
    )
}

export default Login

  • ์˜ค๋Š˜ ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ ๋œ ์ :

  • ์˜ค๋Š˜ ๋ฐฐ์šด๊ฒƒ๋“ค ์ค‘ ๊ถ๊ธˆํ•˜๊ฑฐ๋‚˜ ๋” ์•Œ๊ณ  ์‹ถ์€ ์ :
    ๋‘๋ฒˆ์งธ ๋กœ๊ทธ์ธ์ฐฝ ๊ตฌํ˜„ํ•˜๋Š” ํŽ˜์ด์ง€์—์„œ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ๊ดœ์ฐฎ์€๋ฐ, Enter key ๋ฅผ ์น˜๋ฉด alert์ฐฝ์ด ๋‘๋ฒˆ ๋œฌ๋‹ค. React.StrictMode๋ž‘ ๊ด€๋ จ์ด ์žˆ๋‚˜ ์‹ถ์–ด ์ง€์›Œ๋ดค๋Š”๋ฐ ์—ฌ์ „ํ•˜๋‹ค. ๋ญ”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค. ์ผ๋‹จ ์˜ค๋Š˜์€ Hooks ๋ชจ๋‘ ๊ณต๋ถ€ํ•˜๋Š” ๊ฒŒ ๋ชฉํ‘œ๋ผ, ๋‚˜์ค‘์—๋ผ๋„ ๋‹ค์‹œ ํ•ด๊ฒฐํ•ด๋ด์•ผ๊ฒ ๋‹ค.

  • ์˜ค๋Š˜์˜ ์†Œ๊ฐ:
    ๊ณต๋ถ€ํ•˜๋Š” ๊ฒŒ ์žฌ๋ฏธ์—†์—ˆ๋Š”๋ฐ, ์ ์  ๊ณต๋ถ€ํ• ์ˆ˜๋ก ๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ๋งŽ์•„์ง€๊ณ , ๋˜ ์•„๋Š” ๊ฒƒ๋“ค์ด ์ด์–ด์ง€๋‹ˆ๊นŒ ์žฌ๋ฐŒ์–ด์ง€๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๋‹น์žฅ ์ž˜ํ•  ์ˆ˜๋Š” ์—†์–ด๋„, ๋งค์ผ๋งค์ผ ์กฐ๊ธˆ์”ฉ ์ ์  ๋” ์„ฑ์žฅํ•˜๋Š” ์‚ฌ๋žŒ์ด ๋˜๋ฉด ์ข‹๊ฒ ๋‹ค.

profile
ํ•˜๋ฃจํ•˜๋ฃจ๊ฐ€ ์—ฐ์Šต์ด๋‹ˆ ๋‚ด์ผ์€ ๋” ๊ฐ•ํ•ด์งˆ ๊ฒ๋‹ˆ๋‹ค

0๊ฐœ์˜ ๋Œ“๊ธ€