[React] ๐Ÿ“– React Hooks

์–ธ์ง€ยท2025๋…„ 1์›” 5์ผ

React

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

๐Ÿ“ React Hooks๋ž€?

ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์˜ ๊ธฐ๋Šฅ์„ ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ๋„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” React์˜ ํŠน์ˆ˜ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋ฉ”์„œ๋“œ๋“ค
(ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ๋„ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์˜ ๊ธฐ๋Šฅ์„ ๋งˆ์น˜ ๋‚š์•„์ฑ„๋“ฏ์ด(hook) ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค)

๐Ÿ“ React Hooks ์ข…๋ฅ˜

  1. useState โžก๏ธ State ๋ผ๋Š” ๊ธฐ๋Šฅ์„ ๋‚š์•„์ฑ„์˜ค๋Š” Hook
  2. useRef โžก๏ธ Reference ๋ผ๋Š” ๊ธฐ๋Šฅ์„ ๋‚š์•„์ฑ„์˜ค๋Š” Hook
  3. useEffect
  4. useReducer
    ๋“ฑ๋“ฑ

๐Ÿ“ React Hooks ํŠน์ง•

  • React Hooks์—๋Š” ์ด๋ฆ„ ์•ž์— use๋ผ๋Š” ์ ‘๋‘์‚ฌ๊ฐ€ ๋ถ™๋Š” ํŠน์ง•์ด ์žˆ๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ๋งŒ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
  • ์กฐ๊ฑด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ ๋‚ด๋ถ€์—์„œ๋Š” ํ˜ธ์ถœ ๋ถˆ๊ฐ€
  • use ๋ผ๋Š” ์ ‘๋‘์‚ฌ๋ฅผ ์ด์šฉํ•ด์„œ ์ง์ ‘ ๋‚˜๋งŒ์˜ ์ƒˆ๋กœ์šด Hook์ธ Custom Hook์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“ ์˜ˆ์‹œ

  1. HookExam ํŒŒ์ผ ์ƒ์„ฑ
HookExam.jsx

const HookExam = () => {
    return <div>HookExam</div>;
};

export default HookExam;
  1. App.jsx์—์„œ ํ˜ธ์ถœ
App.jsx

import "./App.css";
import Register from "./components/Register";
import HookExam from "./components/HookExcam";


function App() {
  return (
    <>
      <HookExam/>
    </>
  );
}

export default App;

๐Ÿ“ 3๊ฐ€์ง€ hook ๊ด€๋ จ๋œ ํŒ

1. ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ, ์ปค์Šคํ…€ ํ›…, React ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ๋งŒ ํ˜ธ์ถœ ๊ฐ€๋Šฅ

์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๋ฉด state๊ฐ€ ์™ธ๋ถ€์— ์žˆ์–ด์„œ ์˜ค๋ฅ˜ ํ‘œ์‹œ๊ฐ€ ๋– ์•ผํ•˜๋Š”๋ฐ ์˜ค๋ฅ˜๊ฐ€ ์•ˆ๋– ์„œ ๋‹นํ™ฉ ;; ํ˜น์‹œ ๋ชฐ๋ผ์„œ ๋ธŒ๋ผ์šฐ์ € ์ฝ˜์†”์ฐฝ ํ™•์ธํ–ˆ๋”๋‹ˆ

Invalid hook call. Hooks can only be called inside of the body of a function component.
ํ›„ ~ ์ด์ œ ๋งˆ์Œ์ด ํŽธ์•ˆํ•ด์ง„๋‹ค.
์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” const state = useState(); ๋ฅผ ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ ์•ˆ์— ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

import { useState } from "react";

const HookExam = () => {
    const state = useState();
    
    return <div>HookExam</div>;
};

export default HookExam;

2. ์กฐ๊ฑด๋ถ€๋กœ ํ˜ธ์ถœ๋  ์ˆ˜ ์—†๋‹ค.

์กฐ๊ฑด๋ถ€๋กœ ํ˜ธ์ถœ : ์กฐ๊ฑด๋ฌธ์ด๋‚˜ ๋ฐ˜๋ณต๋ฌธ ๋‚ด๋ถ€์—์„œ hook์ด ํ˜ธ์ถœ๋œ๋‹ค.

์™œ?

: React๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ํ˜ธ์ถœํ•ด์„œ ํ™”๋ฉด์— ๋ Œ๋”๋งํ•  ๋•Œ ์ด๋Ÿฐ ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ˜๋ณต๋ฌธ ๋‚ด๋ถ€์—์„œ hook์„ ํ˜ธ์ถœํ•˜๊ฒŒ๋˜๋ฉด ์„œ๋กœ ๋‹ค๋ฅธ hook๋“ค์˜ ํ˜ธ์ถœ ์ˆœ์„œ๊ฐ€ ์—‰๋ง์ด ๋˜์–ด๋ฒ„๋ฆฌ๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒ โžก๏ธ ๋‚ด๋ถ€์ ์ธ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ

3. ๋‚˜๋งŒ์˜ ํ›…(Custom Hook)์„ ์ง์ ‘ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

const HookExam = () => {
    const [input,setInput] = useState("");

    const onChange = (e) =>{
        setInput(e.target.value);
    }
    
    const state = useState();

    return (
        <div>
            <input value={input} onChange={onChange}/>
        </div>
    );
};

์œ„์˜ ๋‚ด์šฉ์„ custom hook๋กœ ๋งŒ๋“ค์–ด๋ณด๊ธฐ !

import { useState } from "react";

function useInput() {
    const [input, setInput] = useState("");

    const onChange = (e) => {
        setInput(e.target.value);
    }

    return [input, onChange];
}


const HookExam = () => {
    const [input, onChange] = useInput();
    const [input2, onChange2] = useInput();
    
    return (
        <div>
            <input value={input} onChange={onChange}/>
            <input value={input2} onChange={onChange2}/>
        </div>
    );
};

export default HookExam;

๊ทธ๋ƒฅ ํ•จ์ˆ˜ ์•ž์— use๋งŒ ๋ถ™์ด๋ฉด custom hook์ด ์™„์„ฑ๋œ๋‹ค.
(๊ทผ๋ฐ use๋Œ€์‹  get์„ ์จ๋„ ์˜ค๋ฅ˜๊ฐ€ ์•ˆ๋‚˜,,, react ๋ ˆํผ๋Ÿฐ์Šค ๋ณด๋ฉด ๋˜๋Š”๊ฒŒ ๋งž์„ ๊ฒƒ ๊ฐ™๊ธฐ๋„ํ•˜๊ณ  ์•„๋‹Œ ๊ฒƒ ๊ฐ™๊ธฐ๋„ ํ•˜๊ณ ,,, help.....)


๐Ÿ“ Custom Hooks ๋ณด๊ด€ ๋ฐฉ๋ฒ•

๋ณดํ†ต scr ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜์— Hooks ๋ผ๋Š” ๋ณ„๋„์˜ ํด๋”๋ฅผ ๋งŒ๋“ค๊ณ  ์—ฌ๊ธฐ์— Hook์˜ ์ด๋ฆ„์œผ๋กœ ๋ณด๊ด€ํ•œ๋‹ค.

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