React에서 이벤트를 처리하는 방법과 state로 상태를 관리하는 방법, 그리고 state와 props에 대해 디테일하고 꼼꼼하게 알아보겠습니다. React를 사용하면서 반드시 이해해야 할 핵심 개념들이니 천천히 따라와 주세요.
React에서 이벤트 처리는 HTML의 DOM 이벤트 처리와 유사하지만 몇 가지 중요한 차이점이 있습니다.
// React
<button onClick={handleClick}>클릭</button>
// HTML
<button onclick="handleClick()">클릭</button>
// React
<button onClick={handleClick}>클릭</button>
// HTML
<button onclick="handleClick()">클릭</button>
이벤트 핸들러는 컴포넌트 내에서 함수로 정의합니다.
function handleClick() {
console.log('버튼이 클릭되었습니다.');
}
클래스 컴포넌트에서는 다음과 같이 정의합니다.
class MyComponent extends React.Component {
handleClick() {
console.log('버튼이 클릭되었습니다.');
}
render() {
return <button onClick={this.handleClick}>클릭</button>;
}
}
주의: 클래스 컴포넌트에서 this를 사용하려면 바인딩이 필요합니다. 또는 화살표 함수를 사용하여 자동으로 바인딩할 수 있습니다.
React의 이벤트 객체는 브라우저 간 호환성을 보장하는 SyntheticEvent입니다.
function handleClick(event) {
console.log(event.target); // 클릭된 요소
}
function handleClick(event) {
event.preventDefault(); // 기본 동작 방지
event.stopPropagation(); // 이벤트 전파 방지
}
state는 컴포넌트의 동적인 데이터를 관리하기 위해 사용됩니다.
함수형 컴포넌트에서 useState 훅 사용
import { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
// ...
}
클래스 컴포넌트에서 state 초기화
class Counter extends React.Component {
constructor(props) {
super(props);
this.state = { count: 0 };
}
// ...
}
함수형 컴포넌트
function Counter() {
const [count, setCount] = useState(0);
const increment = () => {
setCount(count + 1);
};
// ...
}
클래스 컴포넌트
class Counter extends React.Component {
// ...
increment = () => {
this.setState({ count: this.state.count + 1 });
};
// ...
}
setState는 비동기적으로 동작할 수 있습니다. 따라서 이전 상태 값을 기반으로 새로운 상태를 계산해야 할 때는 함수를 인자로 전달합니다.
함수형 컴포넌트에서 함수형 업데이트
setCount(prevCount => prevCount + 1);
클래스 컴포넌트에서 함수형 업데이트
this.setState(prevState => ({
count: prevState.count + 1
}));
useState를 여러 번 호출하여 여러 개의 상태를 관리할 수 있습니다.
function Form() {
const [username, setUsername] = useState('');
const [password, setPassword] = useState('');
// ...
}
특징
특징
부모 컴포넌트에서 자식 컴포넌트로 Props 전달
function ParentComponent() {
const [message, setMessage] = useState('안녕하세요');
return (
<div>
<ChildComponent message={message} />
<button onClick={() => setMessage('반갑습니다')}>메시지 변경</button>
</div>
);
}
function ChildComponent({ message }) {
return <h1>{message}</h1>;
}
ParentComponent는 message라는 state를 가지고 있습니다.
이 message를 ChildComponent에 props로 전달합니다.
ChildComponent는 전달받은 message를 화면에 출력합니다.
State 변경으로 인한 재렌더링
버튼을 클릭하여 setMessage로 state를 변경하면, ParentComponent와 ChildComponent가 재렌더링됩니다.
하지만 ChildComponent는 props로 전달받은 message를 표시할 뿐, 이를 변경할 수는 없습니다.
끝으로
React에서 이벤트 처리와 상태 관리는 매우 중요한 개념입니다. 또한 state와 props의 차이를 명확히 이해하는 것은 React로 효율적인 컴포넌트를 설계하는 데 큰 도움이 됩니다.
이 포스팅이 React를 이해하는 데 도움이 되셨길 바라며, 궁금한 점이나 추가로 알고 싶은 내용이 있다면 댓글로 남겨주세요. 감사합니다!