Post

๐ŸŽฌ ReactJS๋กœ ์˜ํ™” ์›น ์„œ๋น„์Šค ๋งŒ๋“ค๊ธฐ (08) - useEffect

useEffect

  • ๋‘๊ฐœ์˜ ์ธ์ž๋ฅผ ๊ฐ€์ง€๋Š” function
    • ์ฒซ๋ฒˆ์งธ ์ธ์ž : ๋‚ด๊ฐ€ ๋”ฑ ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰ํ•˜๊ณ ์ž ํ•˜๋Š” ์ฝ”๋“œ
    • ๋‘๋ฒˆ์งธ ์ธ์ž : ๋ฐฐ์—ด [] ์ด ๋“ค์–ด๊ฐ„๋‹ค
  • ์ปดํฌ๋„ŒํŠธ์˜ ์ฒซ๋ฒˆ์งธ ๋ Œ๋” ์‹œ์ ์— ์ฒซ๋ฒˆ์งธ ์ธ์ž๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค
    state๊ฐ€ ๋ณ€ํ™”ํ•˜๋“ , ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๋“  ๋‹จ ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๋„๋ก ํ•ด์ค€๋‹ค
  • ์ฐธ๊ณ ๋กœ useEffect๋Š” ์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง ์ดํ›„์— ์‹คํ–‰๋œ๋‹ค ์ฆ‰, ํ™”๋ฉด์ด ๋จผ์ € ๋‹ค ๊ทธ๋ ค์ง€๊ณ  ๊ทธ ์ดํ›„์— ์‹คํ–‰๋œ๋‹ค๋Š” ์ ! ์•Œ์•„๋‘์žฅ
  • useEffect๋ฅผ ์‚ฌ์šฉํ•ด ์ฝ”๋“œ๊ฐ€ ์–ธ์ œ ์‹คํ–‰๋ ์ง€ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค

    • ex1) ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ์ฒซ ์‹œ์ž‘์ 
    • ex2) ๋ฌด์–ธ๊ฐ€๊ฐ€ update๋  ๋•Œ
  • ์˜ˆ์ œ -Clipchamp-ezgif com-video-to-gif-converter

    1. "I run only once."

      1
      2
      3
      
      useEffect(() => {
        console.log("I run only once.");
      }, []);
      

      โ†’ ๋‘๋ฒˆ์งธ ์ธ์ž ๋ฐฐ์—ด์ด ๋น„์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ปดํฌ๋„ŒํŠธ๊ฐ€d ๋ Œ๋”๋ง ๋  ๋•Œ ํ•œ๋ฒˆ ์‹คํ–‰๋˜๊ณ  ๋

    2. "I run when 'counter' changes."

      1
      2
      3
      
      useEffect(() => {
        console.log("I run when 'counter' changes.");
      }, [counter]);
      

      โ†’ counter๊ฐ€ ๋ณ€ํ™”ํ•  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰

    3. "I run when 'keyword' length is more than 5"

      1
      2
      3
      4
      5
      
      useEffect(() => {
        if (keyword !== "" && keyword.length > 5) {
          console.log("I run when 'keyword' length is more than 5", keyword);
        }
      }, [keyword]);
      

      โ†’ keyword์˜ ๊ธธ์ด๊ฐ€ 5 ์ด์ƒ์ผ๋•Œ ์‹คํ–‰

    • ์ „์ฒด ์ฝ”๋“œ
    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
    32
    33
    34
    35
    
    // App.js
    import { useState, useEffect } from "react";
    
    function App() {
      const [counter, setValue] = useState(0);
      const [keyword, setKeyword] = useState("");
      const onClick = () => setValue((prev) => prev + 1);
      const onChange = (event) => setKeyword(event.target.value);
    
      useEffect(() => {
        console.log("I run only once.");
      }, []);
      useEffect(() => {
        if (keyword !== "" && keyword.length > 5) {
          console.log("I run when 'keyword' length is more than 5", keyword);
        }
      }, [keyword]);
      useEffect(() => {
        console.log("I run when 'counter' changes.");
      }, [counter]);
      return (
        <div>
          <input
            value={keyword}
            onChange={onChange}
            type="text"
            placeholder="Keyword here..."
          />
          <h1>{counter}</h1>
          <button onClick={onClick}>click me</button>
        </div>
      );
    }
    
    export default App;
    
  • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํŒŒ๊ดด๋ ๋•Œ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ํ•  ์ˆ˜๋„ ์žˆ๋‹ค
    โ†’ return์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋ฉด ๋œ๋‹ค.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    function Hello() {
      function hiFn() {
        console.log("created :)");
        return byeFn;
      }
      function byeFn() {
        console.log("bye :(");
      }
      useEffect(hiFn, []);
      return <h1>Hello</h1>;
    }
    
This post is licensed under CC BY 4.0 by the author.