React event handler 기초

박상욱·2022년 2월 24일
0

React

목록 보기
5/20

React의 event handler를 알아보기전에 js와 react의 event handler 차이를 알아보자

js eventListener로 주입하여 주거나

    <script type="text/babel">
      const btnElement = document.getElementById("btn");
      console.log("btnElement", btnElement);
      btnElement.addEventListener("click", () => {
        alert("click");
      });
    </script>
    <div style="margin: auto; width: 100px;">
      <button id="btn">click me</button>
    </div>

inline 방식으로 element의 event 속성을 통해 사용한다.

   <script type="text/babel">
      const handleClick = () => {
        alert("click");
      };
    </script>
    <div style="margin: auto; width: 100px;">
      <button id="btn" onclick="handleClick()" }>click me</button>
    </div>

React도 JS와 유사하지만 Js는 소문자로된 event 속성을 가지고 on{event}
React는 camel case 형식으로된 event 속성을 가진다 on{Event}

크게 차이는 없으므로 아래의 코드를 확인해보도록하자

아래는 예제는 글자를 입력하는 동안에는 looking for... 이보이고 search를 누르면 해당 입력한 value가 result에 보여지게되며,
input box를 초기화하는 예제이다.


  <body>
    <script
      crossorigin
      src="https://unpkg.com/react@17/umd/react.development.js"
    ></script>
    <script
      crossorigin
      src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"
    ></script>
    <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
    <div id="root"></div>
    
    <script type="text/babel">
      const rootElement = document.getElementById("root");
      const state = { keyword: "", typing: true, result: "" };
      const App = () => {
        const handleChange = ({ target }) => {
          //change
          const { name, value } = target;
          setState({ keyword: value });
          // alert("change");
        };

        const handleClick = () => {
          //click 하면 looking for이 안보이고 result가 나와야함.
          setState({
            keyword: "",
            typing: false,
            result: `result : ${state.keyword}`
          });

          // alert("click");
        };

        return (
          <>
            <input onChange={handleChange} value={state.keyword} />
            <button onClick={handleClick}>search</button>
            <div>{state.typing ? "lookgin for... " : state.result}</div>
          </>
        );
      };
      const setState = (newState) => {
        Object.assign(state, newState);
        render();
      };
      const render = () => {
        ReactDOM.render(<App />, rootElement);
      };
      render();
    </script>
  </body>

코드를 살펴보자면 state라는 input의 상태를 가지고 있는 객체를 만들어 함수로 핸들링하는 코드이다.
함수로는

    1. handleChange : input box가 변경될 경우 setState함수를 통해 state값을 변경한다.
    1. handleChick: button이 클릭될 경우 setState함수를 통해 state값을 변경한다.
    1. setState: Object.assign 함수를 통해 state의 변경된 부분을 반영하고 불변객체인 element를 rerender한다.
    1. render: 불변객체 특성때문에 state가 바뀌어도 화면에 값이 안바뀌는 문제를 해결하는 함수이다. state가 변경되는 부분, 화면을 처음 그릴때 호출한다.
    1. Object.assgin : 기존 객체의 값과 새로운 객체의 값을 비교하여 변경된 부분을 기존 객체에 반영한다.
profile
개발자

0개의 댓글