리액트

리액트 훅스 useEffect

double_R_one_G 2021. 2. 23. 20:51
728x90

이전에 useState와 함께 useEffect

 

useEffect는 렌더링이 될때마다 특정 작업 수행하도록 설정할수 있다!

 

아래는 버튼 클릭시 증가하는 간단한 코드

 

import React,{useEffect,useState} from 'react';
function App() {

  const [count,setCount]=useState(0);
  useEffect(()=>{
    console.log('effect');			//버튼 클릭시마다 실행되어 로그찍힘
  })
  console.log('rendering')
  
  const incre=()=>{
    setCount(count+1);
  }
  return (
      <div className="App">
       <h1>
         good!
       </h1>
       <button onClick={incre}>click</button> {count}
      </div>
  );
  }
export default App;

 

위는 값 변경시에 무조건 useEffect를 거친 반면 원하는 값에다가만 추가 가능

 

import React,{useEffect,useState} from 'react';

function App() {
  const [count,setCount]=useState(0);
  const [count1,setCount1]=useState(0);
  useEffect(()=>{
    console.log('effect count1');
  },[count1])			// count1 이 변경시에만 실행됨 
  
  const incre=()=>{
    setCount(count+1);
  }
  const incre1=()=>{
    setCount1(count1+1);
  }
  return (
      <div className="App">
       <h1>
         good!
       </h1>
       <button onClick={incre}>click</button> {count}
       <button onClick={incre1}>click</button> {count1}
      </div>
  );

  }

 

위와 달리 한번만 실행하는 useEffect

 

import React,{useEffect,useState} from 'react';

function App() {

  const [count,setCount]=useState(0);
  const [count1,setCount1]=useState(0);
  useEffect(()=>{
    console.log('effect count1');
  },[count1])

  useEffect(()=>{
    console.log('first');		// 처음 실행 이후 실행 안함
  },[])
  
  const incre=()=>{
    setCount(count+1);
  }
  const incre1=()=>{
    setCount1(count1+1);
  }
  return (
      <div className="App">
       <h1>
         good!
       </h1>
       <button onClick={incre}>click</button> {count}
       <button onClick={incre1}>click</button> {count1}
      </div>
  );

  }
export default App;

 

컴포넌트로 나누기

 

App.js

import React,{useEffect,useState} from 'react';
import Counter from './components/Counter';

function App() {
 return (
      <div className="App">
       {/* <h1>
         good!
       </h1>
       <button onClick={incre}>click</button> {count}
       <button onClick={incre1}>click</button> {count1} */}
       <Counter></Counter>
       <Counter></Counter>
      </div>
  );
  }
export default App;

Counter.js 

 

import React from 'react';
import { useState } from 'react';

const Counter =()=>{
    const [count,setCount]=useState(0);

    const incre=()=>{
        setCount(count+1);
    };

    return (
    <>
        <button onClick={incre}>onClick</button>
        {count}
    </>
    );
};

export default Counter;

 

 

깔끔하게 작성하는게 목표 :)

728x90