useEffect ?

제동현·2023년 1월 31일
0

useEffect

yeeffect가 아니라 effect다

state가 변화할때 모든 component는 다시 실행되고, 모든 code 들도 다시 실행된다.

하지만 component 내부의 몇몇 코드는 처음 딱 한번만 실행되게 하고 다시 실행시키고 싶지 않을때가 있다.

예를 들어 api를 호출했을때 딱 한번만 실행 되는것 처럼 말이디....

그걸 위해서 react 팀이 개발해 놓은게 있어 바로 useEffect임

useEffect를 사용하기에 앞서 먼저 import를 해줘야해 react를 사용한다면 당연히

import { useState } from "react"; 

여기를

import { useState, useEffect } from "react";

이렇게 수정해보자

import는 이게 끝


이제 이걸 어떻게 사용 하느냐

function App() {
  const [counter, setValue] = useState(0);
  const onClick = () => setValue((prev) => prev + 1);
  console.log("i run all the time");
  
useEffect(() => {
 console.log("i run only once");
 },[ ] );

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

export default App;

위와 같이 useEffect안에 익명의 function을 만들어서 사용가능해

useEffect funtion은 쉽게 말해서 우리코드가 딱 한번만 실행될 수 있도록 보호해줘.

잠깐 그리고 내가 설명 안 한게 있을거야 useEffect funtion뒤에 [] <-- 이거 말이야

이게 뭔지 알려줄 시간이야

[]안에 아무것도 안들어가 있으면 최초 1회만 코드가 실행

[] 안에 value 값을 넣으면 그 value값에 변동이 있을때만 실행되게 하는거야

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);
  console.log("i run all the time");

  useEffect(() => {
    console.log("CALL THE API.....");
  }, []);
  useEffect(() => {
    console.log("Search for", keyword);
  }, [keyword]);
  return (
    <div>
      <input
        value={keyword}
        onChange={onChange}
        type="text"
        placeholder="Search"
      />
      <h1>{counter}</h1>
      <button onClick={onClick}>click me </button>
  );
}

export default App;

봐 이 코드에서 2번째 useEffect에

  useEffect(() => {
    console.log("Search for", keyword);
  }, [keyword]);

state의 value 값인 keyword를 넣었어
이제 저 검색창(input)은 keyword값의 변동이 없는이상 실행이 되지 않는거야

근데 저 검색창은 아직 불완전해

왜냐면 처음시작이 될때도 검색이 되고 있거든

그래서 저부분을 수정할거야

 useEffect(() => {
    if (keyword !== "" && keyword.length > 5) {
      console.log("Search for", keyword);
    }
  }, [keyword]);

keyword가 빈값이 아니고 글자수가 6이상일때 검색 되도록

[]에 value가 꼭 하나만 들어갈 수 있는것도 아니야 원한다면 여러개를 쓸 수 도 있어.
[counter, keyword] 이런식으로 만약 이렇게 쓴다면 두 value중 하나만 바뀌어도 코드가 실행되겠지?

이렇게 우리는 useEffect에 대해서 배워봤어
1. componet가 처음 실행될 때
2. value가 update 될때
에 한해서 코드를 실행하도록 제한 하는것!


그리고 마지막으로..

Cleanup funtion에 대해서 설명할게

Cleanup funtion은 컴포넌트가 파괴 될 때 뭔가 할수 있도록 도와주는 기능이야

예를 들어서 누군가는 컴포넌트가 없어질때 어떤 분석결과를 보내고 싶어하거나 event listener를 지우거나 혹은 console.log에 뭔가를 표시하고 싶을 수도 있어

중요한건 컴포넌트가 언제 생성되고 언제 파괴됬는지 알 수 있는거야

0개의 댓글