본문 바로가기

JavaScript/React JS

[React JS] useEffect

useEffect는 매번 호출되지 않고 실행 시 한번만 호출된다. 다만 특정 코드만 변화시 재호출하게 설정할 수 있다.

글로는 어려우니 코드와 함께보기로 한다.

import PropTypes from "prop-types";
import { useState, useEffect } from "react";
import styles from "./Button.module.css";

const Button = ({ text }) => {
  const [counter, setCounter] = useState(0);
  const [keyword, setKeyword] = useState("");
  const onChange = (event) => {
    setKeyword(event.target.value);
  };
  const onClick = () => {
    setCounter((prev) => prev + 1);
  };
  useEffect(() => {
    console.log("call API");
  }, []);
  useEffect(() => {
    console.log("I run when keyword changes");
  }, [keyword]);
  useEffect(() => {
    console.log("I run when counter changes");
  }, [counter]);
  useEffect(() => {
    console.log("I run when keyword & counter changes");
  }, [keyword, counter]);
  return (
    <div>
      <input onChange={onChange} type="text" placeholder="Search here..." />
      <button onClick={onClick} className={styles.btn}>
        {text}
      </button>
      <h3>{counter}</h3>
    </div>
  );
};

Button.propTypes = {
  text: PropTypes.string.isRequired,
};

export default Button;

버튼은 클릭 시 counter가 작동되게 설정하고, input은 텍스트 입력시 onChange 함수로 keyword가 변경되도록 설정했다.

처음 페이지를 새로고침시

useEffect에 작성되어 있던 콘솔들이 전부 실행된다.

이후 카운터 버튼을 클릭하면

input값을 변경해주면

이처럼 array값에 해당 코드를 넣어주면 그 코드가 변화시 해당 useEffect가 실행되고, 빈 arrary를 가진 useEffect는 페이지 새로고침시 한번만 실행된다.

'JavaScript > React JS' 카테고리의 다른 글

[React JS] 간단한 ToDo리스트 만들기  (0) 2022.02.03
[React JS] Cleanup function  (0) 2022.01.25
[React JS] Prop Types  (0) 2022.01.20
[React JS] Memo  (0) 2022.01.20
[React JS] Props  (0) 2022.01.18