728x90
반응형
SMALL
📍함수형 컴포넌트에서 이벤트를 처리하는 방법은 두가지
1) 리액트 훅인 useEffect에 이벤트 리스너 배치
2) html내에 onclick 속성 이용
☑️ 1) 리액트 훅인 useEffect에 이벤트 리스너 배치
- useEffect를 사용하여 컴포넌트가 마운트될 때 이벤트 리스너를 추가하고, 언마운트될 때 이를 제거하는 방식
- 주로 전역 이벤트(예: 스크롤, 키보드 이벤트 등)를 처리할 때 유용
useEffect(() => {
const handleScroll = () => {
console.log('Scrolling...');
};
window.addEventListener('scroll', handleScroll);
return () => {
window.removeEventListener('scroll', handleScroll);
};
}, []);
예시) 윈도우의 어느정도 위치가 되면 사라지기
const Nav = () => {
const [show, setShow] = useState(false);
useEffect(() => {
window.addEventListener("scroll", () => {
if (window.scrollY > 50) {
setShow(true);
} else {
setShow(false);
}
});
return () => {
window.removeEventListener("scroll", () => {}); //해당 컴포넌트가 사용되지 않는데 계속 실행되면 안되니까 리스너 제거 부분
};
}, []);
//[]안에 있으면 그게 변할 때 마다 실행되고 아니면 빈배열이면 컴포넌트가 딱 한번 실행
이벤트 리스너 : window.scrollY
☑️ 2) 핸들링 이벤트
- JSX에서 직접 이벤트 핸들러를 설정하는 방법. 버튼 클릭과 같은 사용자 인터랙션에 자주 사용
- 리액트 엘리먼트에서는 각각 onClick, onMouseOver, OnSubmit, OnChange 등 카멜 케이스로 작성되어야 한다.
const handleClick = () => {
console.log('Button clicked!');
};
return <button onClick={handleClick}>Click Me</button>;
☑️ 사용법
onClick = {( ) => {함수명()}}
onClick = {함수명}
(같은 것)
☑️ 실전 예시 1) 페이지 이동 (onClick)
import React, { useEffect, useState } from 'react';
const handleAddButtonClick = () => {
navigate('/SearchPage'); // SearchPage로 이동
};
<SearchIcon onClick={handleAddButtonClick}><FontAwesomeIcon icon={faSearch} /></SearchIcon>
- 오직 하나의 함수만 받을 수 있음
☑️ 실전 예시 2) 페이지 이동 (onChange)
const handleChange = (e) => {
setSearchValue(e.target.value);
// navigate(`/search?q=${e.target.value}`);
console.log('e.target.value', e.target.value)
}
.
.
.
<SearchInput value={searchValue}
onChange={handleChange} placeholder="Search projects" />
- 이벤트를 객채로 받음
- target : Input 태그
- value: Input의 value, 즉 작성한 값
[React] 이벤트 처리 - onClick(), useState
✏️ html 요소 인라인 onClick 속성으로 이벤트 처리하기, useState로 상태 관리하기
velog.io
728x90
반응형
LIST
'React > 개념' 카테고리의 다른 글
useCallback (0) | 2024.01.05 |
---|---|
$ 사용 (0) | 2024.01.05 |
#2 리액트 컴포넌트 (0) | 2024.01.04 |
rafce (0) | 2024.01.02 |
Async/Await (0) | 2023.10.16 |