react

[React] ๋…ธ๋งˆ๋“œ์ฝ”๋” ReactJs๋กœ ์˜ํ™” ์›น ๋งŒ๋“ค๊ธฐ : #5 useEffect

yjenis 2024. 6. 10. 13:47

 

 

๐Ÿ’— state๋ฅผ ๋ณ€ํ™”์‹œํ‚ฌ ๋•Œ component๋ฅผ ์žฌ์‹คํ–‰์‹œํ‚ค๋Š” ๊ฒƒ

 

<๊ณต์‹ ๋ฌธ์„œ>

https://react.dev/reference/react/useEffect

 

useEffect – React

The library for web and native user interfaces

react.dev

 

 

useEffect

  • useEffect๋Š” ๋‘ ๊ฐœ์˜ argument๋ฅผ ๊ฐ–๋Š” function
    • ์šฐ๋ฆฌ๊ฐ€ ์‹คํ–‰์‹œํ‚ค๊ณ  ์‹ถ์€ ์ฝ”๋“œ
    • dependencies →react.js๊ฐ€ ์ง€์ผœ๋ณด์•„์•ผ ํ•˜๋Š” ๊ฒƒ
      • ๊ทธ๊ฒƒ์ด ๋ณ€ํ™”ํ•  ๋•Œ ์ฝ”๋“œ ์‹คํ–‰
  • useEffect๋ฅผ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” ์–ธ์ œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ง€ ์„ ํƒ๊ถŒ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ
  1. ์•„๋ฌด๊ฒƒ๋„ ์ง€์ผœ๋ณด์ง€ ์•Š์Œ. console.log("I run only once.") ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰๋จ

→์ฒ˜์Œ ์‹คํ–‰(๋ Œ๋”)์‹œ์— ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰ํ•˜๊ณ  ๋‹ค์‹œ๋Š” ์‹คํ–‰ X

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

 

2. ํ•œ ๊ฐœ์˜ ์•„์ดํ…œ๋งŒ ์ง€์ผœ ๋ด„ counter ๋ณ€ํ™”์‹œ์—๋งŒ ์‹คํ–‰

→์‹œ์ž‘ํ•  ๋•Œ, counter ๋ณ€ํ™”์‹œ์—๋งŒ ์‹คํ–‰

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

 

 

3. ๋‘˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์ฝ”๋“œ ์‹คํ–‰

→์‹คํ–‰ํ•  ๋•Œ, keyword ํ˜น์€ counter๊ฐ€ ๋ณ€ํ™”ํ• ๋•Œ๋งŒ ์‹คํ–‰

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

 

 

 

- ์˜ˆ์‹œ ์ฝ”๋“œ

import Button from "./Button"
import styles from "./App.module.css"

import { useState, useEffect } from "react";

function App() {
  const [counter,setValue]=useState(0);
  const onClick=()=>setValue((prev)=>prev+1);
  const onChange=()=>{}
  console.log('I run all the time')
  const iRunOnlyOnce=()=>{
    console.log('i run only once.')
  }
  
  // ํŠน์ • ์ฝ”๋“œ๊ฐ€ ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ
  // useEffect(iRunOnlyOnce,[])
  useEffect(()=>{
    console.log("Call the api...")
  },[])

  return (
    <div>
      <h1>{counter}</h1>
      <button onClick={onClick}>click me</button>
    </div>
  );
}

export default App;

import Button from "./Button"
import styles from "./App.module.css"

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.");
  },[keyword]);
  useEffect(()=>{
    console.log("I run when 'keyword' changes.");
  },[]);
  useEffect(()=>{
    console.log("I run when 'counter' changes.");
  },[counter]);
  useEffect(()=>{
    console.log("I run when 'keyword&counter' changes.");
  },[keyword,counter]);
  // console.log('I run all the time')
  // const iRunOnlyOnce=()=>{
  //   console.log('i run only once.')
  // }
  // useEffect(iRunOnlyOnce,[])

  // useEffect(()=>{
  //   console.log("Call the api...")
  // },[]);
  // ํŠน์ • ์ฝ”๋“œ๊ฐ€ ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ

  // useEffect(()=>{
  //   if(keyword !==""&&keyword.length>5){
  //   console.log("SEARCH FOR", keyword)}
  // },[keyword])
  
  return (
    <div>
      <input 
        value={keyword}
        onChange={onChange}
        type="text"
        placeholder="search here.."
      />
      <h1>{counter}</h1>
      <button onClick={onClick}>click me</button>
    </div>
  );
}

export default App;