R
React 학습 문서

이 문서에서는 React의 핵심 개념과 실제 활용 방법을 자세히 알아봅니다.

이벤트 처리

React의 이벤트 처리 특징

  • camelCase를 사용합니다 (onClick, onSubmit 등)
  • JSX에서는 문자열이 아닌 함수를 이벤트 핸들러로 전달합니다
  • 기본 동작을 막기 위해 preventDefault()를 명시적으로 호출해야 합니다

기본적인 이벤트 처리

function Button() {
  const handleClick = () => {
    console.log('버튼이 클릭되었습니다!');
  };

  return (
    <button onClick={handleClick}>
      클릭하세요
    </button>
  );
}

이벤트 객체 사용하기

function Form() {
  const handleSubmit = (event) => {
    event.preventDefault(); // 폼 제출 기본 동작 방지
    console.log('폼이 제출되었습니다!');
  };

  const handleChange = (event) => {
    console.log(event.target.value); // 입력값 확인
  };

  return (
    <form onSubmit={handleSubmit}>
      <input
        type="text"
        onChange={handleChange}
        placeholder="입력하세요"
      />
      <button type="submit">제출</button>
    </form>
  );
}

매개변수가 있는 이벤트 핸들러

function ItemList() {
  const handleItemClick = (id, event) => {
    console.log('클릭된 아이템 ID:', id);
  };

  return (
    <ul>
      <li onClick={(e) => handleItemClick(1, e)}>아이템 1</li>
      <li onClick={(e) => handleItemClick(2, e)}>아이템 2</li>
    </ul>
  );
}

자주 사용되는 이벤트들

1. 마우스 이벤트

function MouseEvents() {
  return (
    <div
      onMouseEnter={() => console.log('마우스 진입')}
      onMouseLeave={() => console.log('마우스 이탈')}
      onClick={() => console.log('클릭')}
      onDoubleClick={() => console.log('더블 클릭')}
    >
      마우스 이벤트 테스트
    </div>
  );
}

2. 키보드 이벤트

function KeyboardEvents() {
  const handleKeyPress = (event) => {
    if (event.key === 'Enter') {
      console.log('엔터키가 눌렸습니다!');
    }
  };

  return (
    <input
      type="text"
      onKeyPress={handleKeyPress}
      onKeyDown={(e) => console.log('키 다운:', e.key)}
      onKeyUp={(e) => console.log('키 업:', e.key)}
    />
  );
}

3. 폼 이벤트

function FormEvents() {
  return (
    <form onSubmit={(e) => {
      e.preventDefault();
      console.log('폼 제출!');
    }}>
      <input
        type="text"
        onChange={(e) => console.log('값 변경:', e.target.value)}
        onFocus={() => console.log('포커스!')}
        onBlur={() => console.log('블러!')}
      />
      <button type="submit">제출</button>
    </form>
  );
}

이벤트 위임 (Event Delegation)

React는 내부적으로 이벤트 위임을 구현하여 성능을 최적화합니다. 모든 이벤트는 실제로 문서 루트에서 처리되며, 이는 메모리 사용량을 줄이고 성능을 향상시킵니다.

function TodoList() {
  const handleClick = (event) => {
    if (event.target.tagName === 'LI') {
      console.log('할 일 클릭:', event.target.textContent);
    }
  };

  return (
    <ul onClick={handleClick}>
      <li>할 일 1</li>
      <li>할 일 2</li>
      <li>할 일 3</li>
    </ul>
  );
}

커스텀 이벤트 핸들러

function useEventHandler(handler) {
  return useCallback((event) => {
    event.preventDefault();
    handler(event);
  }, [handler]);
}

function CustomButton({ onClick }) {
  const handleClick = useEventHandler(onClick);
  
  return (
    <button onClick={handleClick}>
      클릭
    </button>
  );
}

학습 포인트

  • 각 섹션의 예제 코드를 직접 실습해보세요.
  • 이해가 안 되는 부분은 여러 번 읽고 실습하세요.
  • 학습한 내용을 바탕으로 프로젝트를 만들어보세요.