FrontEnd/React & React-Native

[React] Ref

2023. 3. 14. 23:27
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ“ ref

HTML์—์„œ id๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DOM์— ์ด๋ฆ„์„ ๋‹ค๋Š” ๊ฒƒ์ฒ˜๋Ÿผ Reactํ”„๋กœ์ ํŠธ ๋‚ด๋ถ€์—์„œ DOM์— ์ด๋ฆ„์„ ๋‹ค๋Š” ๋ฐฉ๋ฒ•์ด ref(reference) ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.


๐Ÿ”Ž ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ref๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Hooks๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—
Classํ˜• ์ปดํฌ๋„ŒํŠธ ๋จผ์ € ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๐Ÿ“œ ref๋Š” ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ

  • React์—์„œ state๋กœ๋งŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๊ณ , DOM์„ ๋ฐ˜๋“œ์‹œ ์ง์ ‘ ๊ฑด๋“œ๋ ค์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
    • ex) ํŠน์ • input์— focus์ฃผ๊ธฐ, scroll box ์กฐ์ž‘, canvas ์š”์†Œ์— ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ธฐ ๋“ฑ

๐Ÿ“œ Classํ˜• ์ปดํฌ๋„ŒํŠธ - ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•œ ref ์„ค์ •ํ•˜๊ธฐ

  • ref๋ฅผ ๋งŒ๋“œ๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•์€ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ref๋ฅผ ๋‹ฌ๊ณ ์ž ํ•˜๋Š” ์š”์†Œ์— ref๋ผ๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ props๋กœ ์ „๋‹ฌํ•ด ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • ์ด ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” ref ๊ฐ’์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ๋ฐ›์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์€ ref๋ฅผ ์ปดํฌ๋„ŒํŠธ์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋กœ ์„ค์ •ํ•ด ์ค๋‹ˆ๋‹ค.
    <input
      ref={(ref) => {
          this.input = ref;
      }}
    />
    ์œ„์˜ input ์š”์†Œ๋Š” ์•ž์œผ๋กœ react ์ฝ”๋“œ ๋‚ด์—์„œ this.input์„ ํ†ตํ•˜์—ฌ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.
    this.input ๋ง๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ์–ด๋–ค ์ด๋ฆ„์ด๋ผ๋„ ์ž์œ ๋กญ๊ฒŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
    ์ด๋Š” react ๋‚ด์—์„œ id ์ฒ˜๋Ÿผ ์“ฐ์ด๊ฒŒ ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๐Ÿ“œ Classํ˜• ์ปดํฌ๋„ŒํŠธ - createRef๋ฅผ ํ†ตํ•œ ref ์„ค์ •

ref๋ฅผ ๋งŒ๋“œ๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ react์— ๋‚ด์žฅ๋˜์–ด ์žˆ๋Š” createRef๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ๊ธฐ๋Šฅ์€ react v16.3๋ถ€ํ„ฐ ๋„์ž…๋˜์—ˆ์œผ๋ฉฐ ์ด์ „ ๋ฒ„์ „์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

import { Component } from 'react';

class Sample extends Component{
      input = React.createRef();

    handleFocus = () => {
        this.input.current.focus();
    }
    render(){
        return(
            <div>
                  <input ref={this.input} />
              </div>
        )
    }
}
export default Sample;
  • createRef๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ref๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ์šฐ์„  ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋กœ React.createRef()๋ฅผ ๋‹ด์•„์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•ด๋‹น ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ref๋ฅผ ๋‹ฌ๊ณ ์ž ํ•˜๋Š” ์š”์†Œ์— ref props๋กœ ๋„ฃ์–ด ์ฃผ๋ฉด ref ์„ค์ •์ด ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค.
  • ์„ค์ •ํ•œ ๋’ค ๋‚˜์ค‘์— ref๋ฅผ ์„ค์ •ํ•ด ์ค€ DOM์— ์ ‘๊ทผํ•˜๋ ค๋ฉด this.input.current๋ฅผ ์กฐํšŒํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์™€ ๋‹ค๋ฅธ ์ ์€ ๋’ท๋ถ€๋ถ„์— .current๋ฅผ ๋„ฃ์–ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๐Ÿ“œ ์ปดํฌ๋„ŒํŠธ์— ref ๋‹ฌ๊ธฐ

react์—์„œ๋Š” ์ปดํฌ๋„ŒํŠธ์—๋„ ref๋ฅผ ๋‹ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ์ฃผ๋กœ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์— ์žˆ๋Š” DOM์„ ์ปดํฌ๋„ŒํŠธ ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉํ•  ๋•Œ ์”๋‹ˆ๋‹ค. DOM์— ref๋ฅผ ๋‹ค๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋˜‘๊ฐ™์Šต๋‹ˆ๋‹ค.

<MyComponent 
    ref={(ref) => {this.myComponent}}
/>

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด MyComponent ๋‚ด๋ถ€์˜ ๋ฉ”์„œ๋“œ ๋ฐ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์—๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


728x90
๋ฐ˜์‘ํ˜•
  1. ๐Ÿ“œ ref๋Š” ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ
  2. ๐Ÿ“œ Classํ˜• ์ปดํฌ๋„ŒํŠธ - ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•œ ref ์„ค์ •ํ•˜๊ธฐ
  3. ๐Ÿ“œ Classํ˜• ์ปดํฌ๋„ŒํŠธ - createRef๋ฅผ ํ†ตํ•œ ref ์„ค์ •
  4. ๐Ÿ“œ ์ปดํฌ๋„ŒํŠธ์— ref ๋‹ฌ๊ธฐ
'FrontEnd/React & React-Native' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [React] Hooks : useState( )
  • [React] Component Lifecycle
  • [React] State
  • [React] Props
devwoodie
devwoodie
๊ฐœ๋ฐœํ•˜์ž(DevHaja)devwoodie ๋‹˜์˜ ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
devwoodie
๊ฐœ๋ฐœํ•˜์ž(DevHaja)
devwoodie
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (43)
    • FrontEnd (34)
      • React & React-Native (13)
      • JavaScript & TypeScript (8)
      • CSS (10)
      • HTML (3)
    • Dev knowledge (5)
    • Offline Conference (2)
    • Memoir (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • HOME
  • GITHUB
  • VELOG
  • TAG

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ.
devwoodie
[React] Ref
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๊ฐœ์ธ์ •๋ณด

  • ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ
  • ํฌ๋Ÿผ
  • ๋กœ๊ทธ์ธ

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.