🀍 은지log 🀍

[REACT] HOOK λ³Έλ¬Έ

πŸ’™ React

[REACT] HOOK

Eun_zii 2022. 10. 7. 17:38

Hooks

λŠ” λ¦¬μ•‘νŠΈ v16.8 에 μƒˆλ‘œ λ„μž…λœ κΈ°λŠ₯μœΌλ‘œμ„œ, ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œλ„ μƒνƒœ 관리λ₯Ό ν•  수 μžˆλŠ” useState, 그리고 λ Œλ”λ§ 직후 μž‘μ—…μ„ μ„€μ •ν•˜λŠ” useEffect λ“±μ˜ κΈ°λŠ₯등을 μ œκ³΅ν•˜μ—¬ 기쑴의 ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œ ν•  수 μ—†μ—ˆλ˜ λ‹€μ–‘ν•œ μž‘μ—…μ„ ν•  수 있게 ν•΄μ€€λ‹€.

 

✏️ useState 

import { useState } from 'react'
const [λ³€μˆ˜, set(λŒ€λ¬Έμž)λ³€μˆ˜] = useState('');
  • setν•¨μˆ˜μ— μ˜ˆμ „κ°’ prev( ) 을 λ„£κ³  μ‹ΆμœΌλ©΄ μ½œλ°±ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ•Όν•œλ‹€.
  • filter ν•¨μˆ˜λŠ” 콜백 ν•¨μˆ˜μ˜ 쑰건에 ν•΄λ‹Ήν•˜λŠ” λͺ¨λ“  μš”μ†Œκ°€ μžˆλŠ” 배열을 μƒˆλ‘œ μƒμ„±ν•˜λŠ” κΈ°λŠ₯을 ν•œλ‹€.
import { useState } from 'react'

const Counter2 = () => {
  const [number, setNumber] = useState(7)
  const handleNumber = (n) => setNumber((prev) => prev + n) 
  // μ–΄λ–€ ν•¨μˆ˜λ₯Ό λ§Œλ“€μ§€ μƒκ°ν•˜κ³  섀계해야 μž¬ν™œμš© λ“± ν• μˆ˜ μžˆλ‹€.
  return (
    <>
      <h1>ν˜„μž¬ μΉ΄μš΄ν„° 값은 {number} μž…λ‹ˆλ‹€.</h1>
      <button onClick={() => handleNumber(1)}>+1</button>
      <button onClick={() => handleNumber(-1)}>-1</button>
      <button onClick={() => handleNumber(7)}>+7</button>
      <button onClick={() => handleNumber(-4)}>-4</button>
    </>
  )
}

export default Counter2

πŸ“ useState μ—¬λŸ¬λ²ˆ μ‚¬μš©ν•˜κΈ°

  • ν•˜λ‚˜μ˜ useState ν•¨μˆ˜λŠ” ν•˜λ‚˜μ˜ μƒνƒœ κ°’λ§Œ 관리λ₯Ό ν•  수 있기 λ•Œλ¬Έμ— 관리해야 ν•  μƒνƒœκ°€ μ—¬λŸ¬ 개라면 useState λ₯Ό μ—¬λŸ¬λ²ˆ μ‚¬μš©ν•˜λ©΄ λœλ‹€.
import { useState } from 'react'

const Info = () => {
  const [name, setName] = useState('')
  const [nickname, setNickname] = useState('')

  const handleChangeName = (e) => {
    setName(e.target.value)
  }
  const handleChangeNickame = (e) => {
    setNickname(e.target.value)
  }
  return (
    <>
      <input value={name} onChange={handleChangeName} />
      <input value={nickname} onChange={handleChangeNickame} />
      <h1>이름: {name} </h1>
      <h1>λ‹‰λ„€μž„: {nickname} </h1>
    </>
  )
}

export default Info

✏️ useEffect

useEffect λŠ” λ Œλ”λ§ λ λ•Œ λ§ˆλ‹€ νŠΉμ • μƒν™©μ—μ„œλ§Œ ν•¨μˆ˜κ°€ μΌμ–΄λ‚ μˆ˜ μžˆλ„λ‘ μ œμ–΄λ˜μ–΄ μžˆλ‹€.

  • μ»΄ν¬λ„ŒνŠΈκ°€ 졜초 λ Œλ”λ§ λ λ•Œ ν•œλ²ˆλ§Œ μ‹€ν–‰ν•˜κ³  μ‹Άμ„λ•Œ μ‚¬μš©
  • μ–΄λ–€ λ³€μˆ˜κ°€ 값이 λ°”λ€”λ•Œλ§ˆλ‹€ ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜κ³  μ‹Άμ„λ•Œ μ‚¬μš©
useEffect( () => {
}, []); // λ‘λ²ˆμ§Έ parameter 으둜 μ „λ‹¬λ˜λŠ” λ°°μ—΄ ([])
// λ°°μ—΄ μ•ˆμ—λŠ” useState λ₯Ό 톡해 κ΄€λ¦¬ν•˜κ³  μžˆλŠ” μƒνƒœλ₯Ό λ„£μ–΄μ€˜λ„ 되고,
// props 둜 전달받은 값을 넣어주어도 λœλ‹€.
  • useEffect λŠ” 기본적으둜 λ Œλ”λ§ λ˜κ³ λ‚œ μ§ν›„λ§ˆλ‹€ μ‹€ν–‰λ˜λ©°, λ‘λ²ˆμ§Έ νŒŒλΌλ―Έν„° 배열에 무엇을 λ„£λŠλƒμ— 따라 μ‹€ν–‰λ˜λŠ” 쑰건이 달라진닀.

 

✏️ useRef

useRef Hook 은 ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œ ref λ₯Ό μ‰½κ²Œ μ‚¬μš© ν•  수 있게 ν•΄μ€€λ‹€.

  • λ Œλ”λ§μ΄λž‘ μƒκ΄€μ—†λŠ” λ³€μˆ˜λ₯Ό μ„ μ–Έν• λ•Œ μ‚¬μš© ( 둜컬 λ³€μˆ˜ )
  • DOM λ…Έλ“œλ‚˜ React μ—˜λ¦¬λ¨ΌνŠΈμ— 직접 μ ‘κ·Ό ν• μˆ˜ μžˆλ‹€.

 

✏️ 뒷정리 ν•¨μˆ˜ ( clean up )

μ»΄ν¬λ„ŒνŠΈκ°€ μ–Έλ§ˆμš΄νŠΈλ˜κΈ° μ „μ΄λ‚˜, μ—…λ°μ΄νŠΈ 되기 직전에 μ–΄λ– ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ³  μ‹Άλ‹€λ©΄ useEffect μ—μ„œ 뒷정리(cleanup) ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.

useEffect(() => {
    console.log('');
    return () => { // clean up ν•¨μˆ˜
    };
  });
// 뒷정리 ν•¨μˆ˜κ°€ 호좜 될 λ•Œμ—λŠ” μ—…λ°μ΄νŠΈ 되기 μ§μ „μ˜ 값을 보여쀀닀.

 

✏️ useMemo

useMemo λ₯Ό μ‚¬μš©ν•˜λ©΄ ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€μ—μ„œ λ°œμƒν•˜λŠ” 연산을 μ΅œμ ν™” ν•  수 μžˆλ‹€.

 

✏️ useCallback 

useCallback 은 useMemo와 μƒλ‹Ήνžˆ λΉ„μŠ·ν•œ ν•¨μˆ˜μ΄κ³ , 주둜 λ Œλ”λ§ μ„±λŠ₯을 μ΅œμ ν™”ν•΄μ•Ό ν•˜λŠ” μƒν™©μ—μ„œ μ‚¬μš©ν•˜λŠ”λ° useCallback을 μ‚¬μš©ν•˜λ©΄ 이벀트 ν•Έλ“€λŸ¬ ν•¨μˆ˜λ₯Ό ν•„μš”ν•  λ•Œλ§Œ 생성 ν•  수 μžˆλ‹€.

  • ν•¨μˆ˜ μ„ μ–Έ 과정을 μ€„μΌλ•Œ μ‚¬μš©

 

728x90

'πŸ’™ React' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[REACT] 이벀트 ν•Έλ“€λŸ¬ ( Event handler )  (0) 2022.10.07
[REACT] 반볡 ( Iteration )  (0) 2022.10.07
[REACT] SCSS  (0) 2022.10.06
[REACT] SPA 와 async  (0) 2022.10.06
[REACT] useEffectκ°€ 2λ²ˆμ‹€ν–‰λ λ•Œ  (0) 2022.10.06