ReactJS/개념정리

[React] 특정 코드가 변화했을 때만 코드를 실행시키는법

xowoony 2023. 3. 16. 21:07

학습일 : 2023. 03. 16


 

 

API 처럼 딱 한번만 호출하고 다시는 호출할 일이 없을 경우에는

  useEffect(() => {
    console.log("어쩌고 저쩌고");
  }, []);

 

처럼 마지막에 [ ] 빈배열을 적어준다.

 

 

 

하지만, 특정 코드가 변화했을 때만 코드를 실행하고자 할 때에는

아래처럼 빈배열이 아니라 배열 안에

인식해주길 원하는 걸 넣어준다.

나는 keyword가 변할 때 인식해주길 바라기 때문에

keyword를 넣어주겠다.

// 이 코드는 keyword가 변화할 때만 실행된다.
// if문을 사용하여 keyword가 뭐 하나라도 적힐때 && 5초과일 경우 console.log 되도록 조건을 준다.

  useEffect(() => {
    if (keyword !== "" && keyword.length > 5) {
      console.log("찾는 영화는", keyword);
    }
  }, [keyword]); // 배열 안 keyword 를 넣어줌 - keyword가 바뀔때만 실행됨.

 

 

전체코드

<App.js>

import { useEffect, useState } 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("저는 항상 실행됩니다!");

  // useEffect 사용하기 - API 처럼 딱 한번만 호출하고 다시는 호출하지 않을 경우 사용
  useEffect(() => {
    console.log("저는 한번만 실행됩니다.");
  }, []); // 빈배열 - 리액트가 더이상 지켜볼 것이 없기 때문에 처음 한번만 실행됨.

  // 이 코드는 keyword가 변화할 때만 실행된다.
  // if문을 사용하여 keyword가 뭐 하나라도 적힐때 && 5초과일 경우 console.log 되도록 조건을 준다.
  useEffect(() => {
    if (keyword !== "" && keyword.length > 5) {
      console.log("찾는 영화는", keyword);
    }
  }, [keyword]); // 배열 안 keyword 를 넣어줌 - keyword가 바뀔때만 실행됨.

  return (
    <div>
      <input
        value={keyword}
        onChange={onChange}
        type="text"
        placeholder="검색할 영화를 입력해주세요!"
      />
      <h1>{counter}</h1>
      <button onClick={onClick}>click me</button>
    </div>
  );
}

export default App;

 

 

실행결과

이처럼 항상 출력되는 문구,

딱 한번만 출력되는 문구,

특정 state가 변화했을때만 실행되는 문구

 

를 볼 수 있다.

 

 

 


이처럼 useEffect를 사용하는 방법을 알았으니

응용을 해보면

 

 

<App.js>

이런식으로 응용해볼 수 있겠다.

import { useEffect, useState } 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("저는 한번만 실행됩니다.");
  }, []);
  
  useEffect(() => {
      console.log("저는 키워드가 변화할 때만 실행됩니다.");
  }, [keyword]); 

  useEffect(() => {
    console.log("저는 카운터가 변화할 때만 실행됩니다.");
}, [counter]); 

// 얘는 참고
// useEffect(() => {
//   console.log("저는 카운터 또는 키워드가 변화할 때만 실행됩니다.");
// }, [counter, keyword]); 

  return (
    <div>
      <input
        value={keyword}
        onChange={onChange}
        type="text"
        placeholder="검색할 영화를 입력해주세요!"
      />
      <h1>{counter}</h1>
      <button onClick={onClick}>click me</button>
    </div>
  );
}

export default App;

 

 

 

실행결과