๐Ÿ’ป React - useEffect, useRef

waterglassesยท2022๋…„ 5์›” 25์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
25/50
post-thumbnail

โš ๏ธ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์€ ์˜คํƒ€๋‚˜ ์ž˜๋ชป๋œ ์ •๋ณด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๐Ÿ“ƒ ์˜ค๋Š˜ ๊ณต๋ถ€ํ•œ ๊ฒƒ

  1. JSX
  2. useState
  3. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋ง
  4. ref
  5. useEffect
  6. useRef

1. JSX

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ™•์žฅ ๋ฌธ๋ฒ•์ด๋ฉฐ XML๊ณผ ๋น„์Šทํ•˜๊ฒŒ ์ƒ๊ฒผ๋‹ค. ์ด๋Ÿฐ ํ˜•์‹์œผ๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋˜๊ธฐ ์ „์— ์ผ๋ฐ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ˜•ํƒœ์˜ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋œ๋‹ค.

function App() {
  return (
  	<div>
      Hello <b>react</b>
    </div>
  )
}

์œ„์ฒ˜๋Ÿผ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€ํ™˜๋œ๋‹ค.

function App(){
  return React.createElement('div', null, 'Hello ', React.createElement('b', null, 'react'));
}

1-1. JSX์˜ ์žฅ์ 

  1. ๋ณด๊ธฐ ์‰ฝ๊ณ  ์ต์ˆ™ํ•˜๋‹ค.
  2. ํ™œ์šฉ๋„๊ฐ€ ๋†’๋‹ค.

2. useState

useState ํ•จ์ˆ˜์˜ ์ธ์ž์—๋Š” ์ƒํƒœ์˜ ์ดˆ๊นƒ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค.
ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ฐฐ์—ด์ด ๋ฐ˜ํ™˜๋˜๊ณ  ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋Š” ํ˜„์žฌ ์ƒํƒœ์ด๊ณ , ๋‘ ๋ฒˆ์งธ ์›์†Œ๋Š” ์ƒํƒœ๋ฅผ ๋ฐ”๊พธ์–ด ์ฃผ๋Š” ํ•จ์ˆ˜์ด๋‹ค.

3. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋ง

3-1. ์ด๋ฒคํŠธ ์‚ฌ์šฉ ์‹œ ์ฃผ์˜์‚ฌํ•ญ

  1. ์ด๋ฒคํŠธ ์ด๋ฆ„์€ ์นด๋ฉœ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ์ž‘์„ฑ
  2. ์ด๋ฒคํŠธ์— ์‹คํ–‰ํ•  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํ•จ์ˆ˜ ํ˜•ํƒœ์˜ ๊ฐ’์„ ์ „๋‹ฌํ•œ๋‹ค.
  3. DOM ์š”์†Œ์—๋งŒ ์ด๋ฒคํŠธ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

4. ref

4-1. ref๋Š” ์–ด๋–ค ์ž‘์—…์„ ํ•  ๋•Œ ์‚ฌ์šฉํ• ๊นŒ?

DOM์„ ๊ผญ ์ง์ ‘์ ์œผ๋กœ ๊ฑด๋“œ๋ ค์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

4-2. DOM์„ ๊ผญ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ

  1. ํŠน์ • input์— ํฌ์ปท ์ฃผ๊ธฐ
  2. ์Šคํฌ๋กค ๋ฐ•์Šค ์กฐ์ž‘ํ•˜๊ธฐ
  3. Canvas ์š”์†Œ์— ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ธฐ ๋“ฑ๋“ฑ

4-3. ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•œ ref ์„ค์ •

<input ref={(ref) => {this.input = ref} />

this.input์€ input ์š”์†Œ์˜ DOM์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

4-4. createRef๋ฅผ ํ†ตํ•œ ref ์„ค์ •

๋ฆฌ์•กํŠธ ๋‚ด์žฅ createRef๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•จ.

input = React.createRef()

<input ref={this.input} />
  

5. useEffect

๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง๋  ๋Œ€๋งˆ๋‹ค ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” Hook์ด๋‹ค.

5-1. ๋งˆ์šดํŠธ๋  ๋•Œ๋งŒ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์„ ๋•Œ

ํ•จ์ˆ˜์˜ ๋‘ ๋ฒˆ์žฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋น„์–ด ์žˆ๋Š” ๋ฐฐ์—ด์„ ๋„ฃ์–ด์ค€๋‹ค.

useEffect(() => {
  console.log('๋งˆ์šดํŠธ๋  ๋•Œ๋งŒ ์‹คํ–‰')
}, []) 

5-2. ํŠน์ • ๊ฐ’์ด ์—…๋ฐ์ดํŠธ๋  ๋•Œ๋งŒ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์„ ๋•Œ

๋‘ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ๋˜๋Š” ๋ฐฐ์—ด ์•ˆ์— ๊ฒ€์‚ฌํ•˜๊ณ  ์‹ถ์€ ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค.

useEffect(() => {
  console.log('name ๊ฐ’์ด ์—…๋ฐ์ดํŠธ๋  ๋•Œ๋งŒ ์‹คํ–‰')
}, [name]) 

5-3. ๋’ท์ •๋ฆฌํ•˜๊ธฐ

์ปดํฌ๋„ŒํŠธ๊ฐ€ ์–ธ๋งˆ์šดํŠธ๋˜๊ธฐ ์ „์ด๋‚˜ ์—…๋ฐ์ดํŠธ๋˜๊ธฐ ์ง์ „์— ์–ด๋– ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด return์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
useEffect ๋‚ด๋ถ€์˜ return์€ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ œ๊ฑฐ๋ ๋•Œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

6. useRef

useRef Hookdms ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ ref๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

6-1. DOM์— ์ง์ ‘ ์ ‘๊ทผ

useRef๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ref๋ฅผ ์„ค์ •ํ•˜๋ฉด useRef๋ฅผ ํ†ตํ•ด ๋งŒ๋“  ๊ฐ์ฒด ์•ˆ์˜ current ๊ฐ’์ด ์‹ค์ œ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

import { useRef } from 'react';

function App() {
	const inputRef = useRef();
	return (
		<div>
			<input ref={inputRef} />
			<button onClick={() => inputRef.current.focus()}>
				Focus
			</button>
		</div>
	)
}

6-2. React.forwardRef๋กœ ์ „๋‹ฌ

const FancyButton = React.forwardRef((props, ref) => (
  <button ref={ref} className="FancyButton">
    {props.children}
  </button>
));

// ์ด์ œ DOM ๋ฒ„ํŠผ์œผ๋กœ ref๋ฅผ ์ž‘์ ‘ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
const ref = React.createRef();
<FancyButton ref={ref}>Click me!</FancyButton>;

๐Ÿ”ฅ ๋Š๋‚€์ 

css, vue๋ฅผ ๋๋‚ด๊ณ  React๋กœ ๋‹ค์‹œ TIL์„ ์‹œ์ž‘ํ•˜์˜€๋‹ค. ๊พธ์ค€ํžˆ ํ•˜๋ ค ํ–ˆ์ง€๋งŒ ๋งค์ผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์‰ฝ์ง€ ์•Š์Œ์„ ๋‹ค์‹œ ๊นจ๋‹ซ๊ฒŒ ๋˜์—ˆ๋‹ค. ๋‹ค์‹œ ์—ด์‹ฌํžˆ ์จ๋ณด์ž!๐Ÿ“

react๋กœ ๋ถ„๋ช… ํ”„๋กœ์ ํŠธ๋ฅผ ํ–ˆ๋Š”๋ฐ ์™œ์ด๋ฆฌ ๋‚ฏ์„ ์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค. ์ฑ…์œผ๋กœ ๊ฐ•์˜ ๋“ค์€ ๋‚ด์šฉ์„ ๋‹ค์‹œ ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ๋‹ค์‹œ ์‚ดํŽด๋ณด๋‹ˆ๊นŒ ์ด๋Ÿฐ๊ฑฐ์˜€๊ตฌ๋‚˜ ์‹ถ์—ˆ๋‹ค. ์ด์ œ ๋ฆฌ์•กํŠธ ์‹œ์ž‘์ด๋‹ˆ๊นŒ ๊พธ์ค€ํžˆ ๋‹ฌ๋ ค๋ณด์ž!

Refer

์ •๋ฆฌ

Day48

profile
๋งค ์ˆœ๊ฐ„ ์„ฑ์žฅํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

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