ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

web/react dom

findDOMNode

dev_been94 2024. 12. 16. 17:09
728x90
๋ฐ˜์‘ํ˜•

findDOMNode

 

๐ŸŽฏ findDOMNode๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

**findDOMNode**๋Š” React์—์„œ ํŠน์ • DOM ์š”์†Œ๋ฅผ ์ง์ ‘ ์ฐพ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜์˜ˆ์š”.
React ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ™”๋ฉด์— ๋ Œ๋”๋ง๋˜๋ฉด **HTML ํƒœ๊ทธ(์ฆ‰, DOM ์š”์†Œ)**๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š”๋ฐ์š”,
์ด DOM ์š”์†Œ์— ์ง์ ‘ ์ ‘๊ทผํ•˜๊ณ  ์‹ถ์„ ๋•Œ findDOMNode๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ• ๋น„์œ ๋กœ ์ดํ•ดํ•˜๊ธฐ: ์‚ฌ๋ฌผํ•จ ์ฐพ๊ธฐ

์—ฌ๋Ÿฌ๋ถ„์ด ํ•™๊ต์— ๊ฐ€์„œ ์ž๊ธฐ ์‚ฌ๋ฌผํ•จ์„ ์ฐพ๋Š”๋‹ค๊ณ  ์ƒ์ƒํ•ด ๋ณด์„ธ์š”. ๐ŸŽ’

  1. React ์ปดํฌ๋„ŒํŠธ๋Š” ์‚ฌ๋ฌผํ•จ ๋ฒˆํ˜ธํ‘œ
    • ์‚ฌ๋ฌผํ•จ๋งˆ๋‹ค **๋ฒˆํ˜ธ(์ปดํฌ๋„ŒํŠธ)**๊ฐ€ ๋ถ™์–ด ์žˆ์–ด์š”.
  2. DOM ์š”์†Œ๋Š” ์‚ฌ๋ฌผํ•จ ์ž์ฒด
    • ์šฐ๋ฆฌ๊ฐ€ ๋ˆˆ์œผ๋กœ ๋ณด๊ฑฐ๋‚˜ ์†์œผ๋กœ ๋งŒ์งˆ ์ˆ˜ ์žˆ๋Š” **์‚ฌ๋ฌผํ•จ(HTML ํƒœ๊ทธ, DOM ์š”์†Œ)**์ด์—์š”.
  3. findDOMNode๋Š” ์‚ฌ๋ฌผํ•จ์„ ์ฐพ๋Š” ๋„๊ตฌ
    • "5๋ฒˆ ์‚ฌ๋ฌผํ•จ์ด ์–ด๋”” ์žˆ์ง€?"๋ผ๊ณ  ๋ฌผ์–ด๋ณผ ๋•Œ findDOMNode๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ”๋กœ ์‚ฌ๋ฌผํ•จ ์œ„์น˜๋ฅผ ์•Œ๋ ค์ค˜์š”.
    • ์ฆ‰, ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ†ตํ•ด ์‹ค์ œ DOM ์š”์†Œ๋ฅผ ์ฐพ์•„๋‚ด๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ› ๏ธ findDOMNode ์‚ฌ์šฉ๋ฒ•

findDOMNode๋Š” ReactDOM ํŒจํ‚ค์ง€์— ํฌํ•จ๋˜์–ด ์žˆ์–ด์š”.
์•„๋ž˜ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ๋ณผ๊นŒ์š”?

 

1. findDOMNode ๊ธฐ๋ณธ ์˜ˆ์ œ

import React, { Component } from 'react';
import ReactDOM from 'react-dom';

class MyComponent extends Component {
  componentDidMount() {
    // findDOMNode๋ฅผ ์‚ฌ์šฉํ•ด DOM ์š”์†Œ์— ์ ‘๊ทผ
    const domElement = ReactDOM.findDOMNode(this);
    console.log(domElement); // ์ฝ˜์†”์— ํ•ด๋‹น DOM ์š”์†Œ๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค
  }

  render() {
    return <div>์•ˆ๋…•ํ•˜์„ธ์š”! ์ €๋Š” DOM์ž…๋‹ˆ๋‹ค ๐Ÿ˜Š</div>;
  }
}

export default MyComponent;

 

๐Ÿ” ์ฝ”๋“œ ์„ค๋ช…

  1. ReactDOM.findDOMNode(this)
    • findDOMNode๋Š” ์ปดํฌ๋„ŒํŠธ ์ธ์Šคํ„ด์Šค(์—ฌ๊ธฐ์„œ๋Š” this)๋ฅผ ์ „๋‹ฌ๋ฐ›์•„์„œ
      ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์˜ ์‹ค์ œ DOM ์š”์†Œ๋ฅผ ์ฐพ์•„์ค๋‹ˆ๋‹ค.
  2. ๊ฒฐ๊ณผ
    • ์ฝ˜์†”์— <div>์•ˆ๋…•ํ•˜์„ธ์š”! ์ €๋Š” DOM์ž…๋‹ˆ๋‹ค ๐Ÿ˜Š</div>๋ผ๋Š” DOM ์š”์†Œ๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.
    • ์ด๋ ‡๊ฒŒ ์šฐ๋ฆฌ๋Š” React ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ†ตํ•ด ์ง์ ‘ DOM์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ผ์š”.

 

2. findDOMNode๋กœ ์Šคํƒ€์ผ ์กฐ์ž‘ํ•˜๊ธฐ

findDOMNode๋ฅผ ์‚ฌ์šฉํ•ด DOM ์š”์†Œ์˜ ์Šคํƒ€์ผ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜๋„ ์žˆ์–ด์š”.

import React, { Component } from 'react';
import ReactDOM from 'react-dom';

class MyComponent extends Component {
  componentDidMount() {
    const domElement = ReactDOM.findDOMNode(this);
    domElement.style.color = 'blue'; // ํ…์ŠคํŠธ ์ƒ‰์ƒ์„ ํŒŒ๋ž€์ƒ‰์œผ๋กœ ๋ณ€๊ฒฝ
  }

  render() {
    return <div>์•ˆ๋…•ํ•˜์„ธ์š”! ์ƒ‰์ด ๋ณ€ํ–ˆ์–ด์š”! ๐ŸŽจ</div>;
  }
}

export default MyComponent;

 

๐Ÿ” ์ฝ”๋“œ ์„ค๋ช…

  1. findDOMNode๋กœ ์ฐพ์€ DOM ์š”์†Œ์˜ ์Šคํƒ€์ผ์— ์ ‘๊ทผํ•ด์š”.
  2. **style.color**๋ฅผ ๋ณ€๊ฒฝํ•ด์„œ ํ…์ŠคํŠธ ์ƒ‰์ƒ์„ ํŒŒ๋ž€์ƒ‰์œผ๋กœ ๋ฐ”๊ฟ”์š”.

 

๐Ÿšจ findDOMNode๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•  ์ 

  1. findDOMNode๋Š” ๋น„์ถ”์ฒœ(deprecated) ๊ธฐ๋Šฅ์ด์—์š”
    • React ํŒ€์€ findDOMNode ๋Œ€์‹  **ref**๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ์–ด์š”.
    • ์ด์œ ๋Š” findDOMNode๊ฐ€ React์˜ ์„ ์–ธ์  ๋ฐฉ์‹๊ณผ ๋งž์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .
  2. ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์–ด์š”
    • findDOMNode๋Š” ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”.
    • ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” ๋Œ€์‹  **useRef**๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

โœ… findDOMNode ๋Œ€์‹  ref ์‚ฌ์šฉํ•˜๊ธฐ

React์—์„œ ref๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋” ์•ˆ์ „ํ•˜๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ DOM ์š”์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด์š”.
์•„๋ž˜๋Š” ref๋ฅผ ์‚ฌ์šฉํ•œ ๋™์ผํ•œ ์˜ˆ์ œ์˜ˆ์š”.

import React, { Component, createRef } from 'react';

class MyComponent extends Component {
  constructor(props) {
    super(props);
    this.myRef = createRef(); // ref ์ƒ์„ฑ
  }

  componentDidMount() {
    this.myRef.current.style.color = 'blue'; // ref๋ฅผ ์‚ฌ์šฉํ•ด DOM ์Šคํƒ€์ผ ๋ณ€๊ฒฝ
  }

  render() {
    return <div ref={this.myRef}>์•ˆ๋…•ํ•˜์„ธ์š”! ์ƒ‰์ด ๋ณ€ํ–ˆ์–ด์š”! ๐ŸŽจ</div>;
  }
}

export default MyComponent;

 

๐Ÿ” ref๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ์ 

  1. ๋” ์„ ์–ธ์ ์ด๊ณ  ์ง๊ด€์ ์ด์—์š”
    • ref๋ฅผ ํ†ตํ•ด DOM ์š”์†Œ์— ์ ‘๊ทผํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๋” ๊น”๋”ํ•ด์ ธ์š”.
  2. ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • useRef ํ›…์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋„ DOM ์š”์†Œ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์–ด์š”.

 

๐ŸŒŸ ํ•œ ์ค„ ์š”์•ฝ

**findDOMNode**๋Š” React์—์„œ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์˜ DOM ์š”์†Œ์— ์ง์ ‘ ์ ‘๊ทผํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜์ง€๋งŒ,
ํ˜„์žฌ๋Š” **ref**๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์•ˆ์ „ํ•˜๊ณ  ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•์ด์—์š”!

 

 

๐ŸŽ‰ ๋งˆ๋ฌด๋ฆฌ

React์˜ **findDOMNode**๋Š” ์˜ค๋ž˜๋œ ๊ธฐ๋Šฅ์ด์ง€๋งŒ, DOM ์š”์†Œ๋ฅผ ์ฐพ์•„์•ผ ํ•˜๋Š” ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉ๋˜์—ˆ์–ด์š”.
ํ•˜์ง€๋งŒ ์ด์ œ๋Š” ๋” ๊น”๋”ํ•˜๊ณ  ์•ˆ์ „ํ•œ ๋ฐฉ๋ฒ•์ธ **ref**๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค!

728x90
๋ฐ˜์‘ํ˜•

'web > react dom' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

prefetchDNS  (2) 2024.12.16
preconnect  (2) 2024.12.16
hydrate  (1) 2024.12.16
flushSync  (1) 2024.12.16
createPortal  (1) 2024.12.16
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/08   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
๊ธ€ ๋ณด๊ด€ํ•จ
๋ฐ˜์‘ํ˜•
250x250