state는 리액트 컴포넌트에서 변경 가능한 데이터를 관리하는 데 사용되는 객체이다.
단순히 정적인 텍스트나 이미지를 표시하는 것이 아니라, 상태가 변할 때 UI도 변경되도록 하려면 state가 필요하다.
리액트에서는 함수형 컴포넌트에서 state를 사용하기 위해 useState라는 Hook을 사용한다.
const [state, setState] = useState(초기값);
아래는 useState를 사용하여 클릭 횟수를 관리하는 예제이다.
import React, { useState } from "react";
function Counter() {
// useState를 사용하여 count 상태 선언, 초기값은 0
const [count, setCount] = useState(0);
return (
<div>
<p>총 {count}번 클릭했습니다. </p>
<button onClick={() => setCount(count + 1)}>클릭</button>
</div>
);
}
export default Counter;
const [count, setCount] = useState(0);<p> 태그는 count값이 변경될 때마다 자동으로 업데이트 된다.useState를 사용하면 React가 상태 변경을 감지하고, 변경된 값만 업데이트 한다.
일반 변수를 사용하면 변경 사항이 화면에 반영하지 않는다.
function Counter() {
let count = 0;
return (
<div>
<p>총 {count}번 클릭했습니다.</p>
<button onClick={() => count++}>클릭</button> {/* 동작하지 않음 */}
</div>
);
}
class Counter extends React.Component {
constructor(props) {
super(props);
this.state = { count: 0 };
}
render() {
return (
<div>
<p>총 {this.state.count}번 클릭했습니다.</p>
<button onClick={() => this.setState({ count: this.state.count + 1 })}>
클릭
</button>
</div>
);
}
}
import React, { useState } from "react";
function LikeButton() {
const [liked, setLiked] = useState(false);
return (
<button onClick={() => setLiked(!liked)}>
{liked ? "좋아요 취소" : "좋아요"}
</button>
);
}
export default LikeButton;