React로 간단한 검색창 만들기

React로 간단한 검색창 만들기

2023-03-31

안녕하세요.

지난 시간에는 React에서 이벤트를 핸들링하는 방법에 대해서 알아봤습니다.

이번 시간에는 이벤트를 활용해서 간단한 검색창을 만들어 보겠습니다.

input에 입력한 값을 button을 누르면 p태그에 보여지는 간단한 검색창을 만들어 보겠습니다.

<!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 = () => {
      return (
        <>
          <input />
          <button>search</button>
          <p>Looking for ...</p>
        </>
      )
    }
    ReactDOM.render(<App />, rootElement);
  </script>

</body>
</html>

여기에 state를 추가하고 input에 입력한 값을 실시간으로 p태그에 보여지게 해 보겠습니다.

<!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 state = { keyword: "", typing: false, result: ""}

    const App = () => {
      function handleChange(event) {
        setState({keyword: event.target.value})
      }
      return (
        <>
          <input onChange={handleChange} />
          <button>search</button>
          <p>Looking for {state.keyword} ...</p>
        </>
      )
    }

    function setState(newState) {
      Object.assign(state, newState);
      render();
    }

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

    render();

  </script>

</body>
</html>

여기서 Object.assign()은 앞에있는 객체에 뒤에있는 객체를 병합하는 역할을 합니다.

그리고 typing 할때마다 실시간으로 렌더링할 수 있도록 렌더함수를 선언해서 setState함수에서 호출하도록 합니다.

버튼에 onClick 이벤트를 추가해서 버튼을 누르면 p태그에 검색 결과를 보여주도록 하겠습니다.

<!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 state = { keyword: "", typing: false, result: ""}

    const App = () => {
      function handleChange(event) {
        setState({keyword: event.target.value, typing: true})
      }

      function handleClick() {
        setState({typing: false, result: `We find result of ${state.keyword}`})
      }

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

    function setState(newState) {
      Object.assign(state, newState);
      render();
    }

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

    render();

  </script>

</body>
</html>

여기서 typing이 true일때는 Looking for ... 이라는 문구를 보여주고 false일때는 result를 보여주도록 했습니다.

이렇게 React를 사용해서 간단한 검색창을 만들어 봤습니다.

감사합니다.

< 목록으로 돌아가기