React useEffect 사용하는 방법

React useEffect 사용하는 방법

2023-04-06

안녕하세요.

지난 시간에 React에서 localStorage를 사용하는 방법을 알아보았습니다.

이번 시간에는 React에서 useEffect를 사용하는 방법을 알아보겠습니다.

<!DOCTYPE html>
<html lang="en">
<body>
  <div id="root"></div>
  <script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
  <script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
  <script crossorigin src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
  <script type="text/babel">
    const rootElement = document.getElementById("root");

    const App = () => {
      const [keyword, setKeyword] = React.useState(() => window.localStorage.getItem("keyword") || "")
      const [result, setResult] = React.useState("")
      const [typing, setTyping] = React.useState(false)

      React.useEffect(() => {
          window.localStorage.setItem("keyword", keyword)
      }, [keyword, typing])

      function handleChange(event) {
        setKeyword(event.target.value)
        setTyping(true)
      }

      function handleClick() {
        setTyping(false)
        setResult(`We find results of ${keyword}`)
      }

      return (
        <>
          <input onChange={handleChange} value={keyword} />
          <button onClick={handleClick}>search</button>
          <p>{typing ? `Looking for ${keyword}...` : result}</p>
        </>
      )
    }

    ReactDOM.render(<App />, rootElement);

  </script>

</body>
</html>

여기서 useState와 useEffect의 차이점에 대해서 말해보자면, useState의 경우 모든 이벤트에 대해서 반응하지만, useEffect의 경우, dependency array로 지정된 값이 변경될 때만 반응합니다.

만약, dependency array가 빈 배열이라면, 컴포넌트가 처음 렌더링 될 때만 반응합니다.

그리고 dependency array를 생략하면, 컴포넌트가 처음 렌더링 될 때와, 모든 이벤트에 대해서 반응합니다.

이렇게 useState와 useEffect의 차이점과 useEffect를 사용하는 방법에 대해서 알아보았습니다.

감사합니다.

< 목록으로 돌아가기