React

[React] useEffect

euge 2023. 3. 15. 12:17
import { useEffect,useState } from 'react';

useEffect : 컴포넌트가 렌더링 될 때 특정 작업을 실행할 수 있도록 하는 Hook.

처음 마운트(APP의 JSX내용이 HTML로 들어가서 보일때) 되었을 때 한번, 업데이트 될때마다(스테이트값이 변경되었을때.)

 

import { useEffect,useState } from 'react';
import { Routes, Route, Link } from 'react-router-dom'
import './App.css';

function App() {
  let [count,setCount] = useState(0);
 
  useEffect(()=>{//처음 마운트되었을때 한번, 업데이트 될때마다(스테이트값이 변경되었을때)
    alert(777);
 });
  return (
    <div className="App">
      <h1>{ count }</h1>
      <button onClick={()=>{
        setCount(count+1); //count = count + 1;
      }}>버튼</button>
    </div>
  );
}

export default App;

처음 페이지 실행되었을때 777경고창, 버튼을 누를때마다 777경고창 노출.

여러 state가 있어도 실행 되지만, 특정 state가 실행되면 실행되게 만들 수 있음.

 

function App() {

  let [count,setCount] = useState(0);
  let [num,setNum] = useState(0);

  useEffect( ( )=>
    alert(777);
  },[count]);

  return (
    <div className="App">
      <h1>{ count }</h1>
      <h1>{ num }</h1>
      <button onClick={()=>{
        setCount(count+1); //count = count + 1;
      }}>버튼</button>
      <button onClick={()=>{
        setNum(num+1);
      }}>버튼</button>
    </div>
  );
}

특정 staet에서만 useEffect 실행되게하려면 함수뒤에 추가. [count]

 


--------------배너광고-------------- 5초 후에 사라지게하기.

function App() {
 
  let [show,setShow] = useState(true);

  useEffect(()=>{

    setTimeout(()=>{
      setShow(false);
    },5000);

  },[ ]); // 마운트 되었을때 한번.

  return (
    <div className="App">
      {show ? <div>------------배너광고------------</div> : null}
    </div>
  );
}

export default App;

setInterval  사용하기

function App() {

  let [count,setCount] = useState(0);
 
  useEffect(()=>{
   
    let timer = setInterval(()=>{ //두번째 실행
      setCount(count+1);
    },1000);
   
    return ()=>{ //먼저실행 //이거없이 실행하면중복되서 오류생김
      clearInterval(timer); //중복타이머 제거
    };

  });


  return (
    <div className="App">
     
      {count}

    </div>
  );
}