React

[React] Handler

wwxs 2024. 8. 29. 04:09

Handler

  • 사용자와의 상호작용을 처리하기 위한 함수
  • UI(사용자 인터페이스)에서 발생하는 이벤트에 반응하여 동작되는 기능을 정의
더보기
interface ConsoleProps {
  message: string;
  children: React.ReactNode; // HTML 요소 + 사용자 정의 컴포넌트
}

// 자식 컴포넌트
// >> 부모 컴포넌트에서 속성으로 문자열 message의 값과
//    해당 컴포넌트 태그들 사이에 내용을 전달받음
function ConsoleButton({ message, children }: ConsoleProps) {
  return (
    <button
      onClick={() => {
        console.log(`${message}`);
      }}
    >
      {children}
    </button>
  );
}

export default function Handler01() {
  function handleButtonClick() {
    console.log("버튼을 클릭하였습니다.");
  }
  return (
    <div>
      {/* 
        버튼 요소에 이벤트 등록 
        >> prop에 이벤트를 '전달'
        >> on속성으로 작성 - 속성의 중괄호 내에 JS기능을 명시(이벤트 핸들러)

        +) 이벤트 핸들러의 함수는 호출 x, 등록되어야 한다
      */}
      <button onClick={handleButtonClick}>클릭</button>

      <button
        onClick={function () {
          console.log("버튼 클릭2");
        }}
      >
        클릭2
      </button>

      <button
        onClick={() => {
          console.log("버튼 클릭3");
        }}
      >
        클릭3
      </button>

      {/* 핸들러에 데이터 전달 */}
      <ConsoleButton message="A를 동작">
        {/* ReactNode를 전달 할 경우 HTML 요소의 '내용' 전달 가능 */}
        A를 동작시키는 버튼
      </ConsoleButton>
      <ConsoleButton message="B를 동작">
        {/* ReactNode를 전달 할 경우 HTML 요소의 '내용' 전달 가능 */}
        B를 동작시키는 버튼
        <p>안녕</p>
      </ConsoleButton>
    </div>
  );
}
더보기
import React, { useState } from 'react'

// 자식 컴포넌트
// : 부모 컴포넌트에서 사용되며 부모로 부터 count 값을 전달받아 UI로 출력
// >> p요소 내에 count 변수값을 작성
export function ChildComponent({ count } : { count: number }) {

  return(
    <p style={{color: 'orange'}}>{count}</p>
  )
}

// 부모 컴포넌트
// : counter UI 작성
// >> 버튼 2가지를 생성하여 클릭 시 count 값이 변경
//  : 변경된 count값은 자식 컴포넌트에게 전달
export default function Handler02() {
  const[count, setCount] = useState<number>(0);
  return (
    <div>
      <button onClick={() => {setCount(count + 1)}}>증가</button>
      <button onClick={() => {setCount(count - 1)}}>감소</button>

      <ChildComponent count={count} />
    </div>
  )
}
더보기
import React from 'react'

// 이벤트 핸들러 - Props 전달

//! 이벤트 핸들러 prop의 이름 지정 방법
// : on- 시작
// >> on 다음에는 이벤트 설명 키워드 작성 (시작은 대문자)
// EX) onButtonClick, onIncrementClick, onInputChange

interface ButtonProps {
  children: React.ReactNode;
  onButtonClick: () => void; // 매개변수 X, 반환값 X
}

// 자식 컴포넌트
function Button({ children, onButtonClick }: ButtonProps) {
  return(
    // onClick 이벤트 속성에 부모로부터 전달 받은 onButtonClick 함수 전달
    <button onClick={onButtonClick}>
      {children}
    </button>
  )
}

export default function Handler03() {
  const buttonHandler = () => {
    console.log('버튼 클릭');
  }
  return (
    <div>
      <Button onButtonClick={buttonHandler}>
        이벤트 핸들러(기능 전달)
      </Button>

      <hr />
      {/* 기본 동작 방지 */}
      <form action="" onSubmit={(e) => {
          e.preventDefault();
          console.log('전송완료 - 기본동작은 방지')}}>

        <input type="text" />

        <select name="" id="">
          <option value=""></option>
        </select>
        {/* 
        onSubmit 핸들러의 경우 기본으로 데이터를 전송하고 새로고침 하는 기능을 가짐 
        */}
        <button type='submit'>전송</button>
      </form>
    </div>
  )
}

'React' 카테고리의 다른 글

[React] Hooks - useRef  (0) 2024.08.31
[React] Hooks - useState  (0) 2024.08.31
[React] Rendering  (0) 2024.08.29
[React] Props  (0) 2024.08.29
[React] JSX  (0) 2024.08.29