이벤트 연결하는 법
- jsx에서 camelCase 형태의 속성에 함수를 전달함.
import { useCallback } from "react";
// 컴포넌트 외부에 함수 선언
function handleClick2(e) {
console.log("click2", e);
}
function App() {
/**
* 합성 이벤트 (SyntheticEvent)
* - React에서 이벤트가 발생할 때, 이벤트 핸들러의 인자로 합성 이벤트 객체가 전달됨
* - 이 합성 이벤트는 javascript에서 전달 받는 이벤트 객체를 확장(래핑)한 객체임
* (거의 동일한 인터페이스를 가지고 있음)
* - 원본 이벤트 객체(native event)는 syntheticEvent.nativeEvent 에 있음
* - 지금은 그냥 같은 이벤트 객체라고 생각해도 무방
*/
function handleClick1(e) {
console.log("click1", e);
}
/**
* 이벤트 핸들러(함수)를 만들 때는 react lifecycle을 고려하자!
* - 컴포넌트가 리랜더링 되면 컴포넌트 내에서 단순 정의한 함수가 새로운 함수로 만들어짐
* - 이것은 불필요한 작업으로 성능 문제를 야기함
* - 그래서 함수의 정의를 최대한 컴포넌트 밖으로 빼거나,
* useCallback으로 감싸줘서 매 랜더링 마다 새로 만들어지지 않도록 해줄 필요가 있음
*/
const handleChange = useCallback((e) => {
console.log("change", e.target.value);
}, []);
return (
<div>
<button onClick={handleClick1}>Button1</button>
<button onClick={handleClick2}>Button2</button>
<div>
<input type="text" onChange={handleChange} />
</div>
</div>
);
}
이벤트 종류
Mouse 이벤트
- onClick, onMouseDown, onMouseUp, onMouseEnter, onMouseLeave, onMouseMove
Keyboard 이벤트
- onKeyDown(물리적인 키에 반응), onKeyUp, onKeyPress(실제적으로 문자가 들어왔을 때만 반응)
Focus 이벤트
- onFocus(요소가 포커스 될 때), onBlur(요소의 포커스가 사라졌을 때)
- Form 이벤트: onChange
Form 요소
Controlled Component (제어 컴포넌트)
- React에 입력 요소의 값이 제어되는 컴포넌트
- 장점 : 컴포넌트의 state와 input value가 완전히 동일한 값을 갖음 (신뢰가능한 출처)
다른 component에 input value를 전달하거나 다른 이벤트 핸들러에서 값을 재설정할 수 있음.
- 단점 : 값이 변경되는 매 순간 렌더링 됨.
'Javascript > React' 카테고리의 다른 글
| React의 Life Cycle 이해 - Hooks (5) | 2025.01.08 |
|---|---|
| 컴포넌트, Props, State (3) | 2025.01.07 |
| React JSX (javascript xml) (1) | 2025.01.06 |
| React란? (0) | 2025.01.06 |