state란 말 그대로 컴포넌트의 상태 값이다.
state와 props는 둘 다 object 이고, 화면에 보여줄 정보(상태)를 가지고 있다는 점에서 서로 비슷한 역할을 한다.
props
는 컴포넌트를 사용하는 부모 쪽에서 전달해야만 사용할 수 있고(함수의 parameter 치럼) 읽기 전용이다.
state
는 컴포넌트 내에서 정의하고 사용하며 업데이트 할 수 있다. 이름은 원하는대로 지을 수 있고 한 개가 아닌 여러 개의 state를 추가할 수 있다.
// 버튼을 눌렀을 때 state 를 변화시켜서 보여줘야할 텍스트를 바꾸는 코드
import { useState } from 'react';
import ReactDOM from 'react-dom';
function Button(props) {
const [isClicked, setIsClicked] = useState(false);
return (
<button className="btn" onClick={() => setIsClicked(!isClicked)}>
{isClicked ? '좋아요' : '싫어요'}
</button>
);
}
ReactDOM.render(<Button />, document.getElementById('root'));
1. const [isClicked, setIsClicked] = useState(false)
isClicked
라는 state와, setIsClicked
라는 state를 업데이트 할 수 있는 함수를 선언했다.:: 설명
useState
라는 함수를 이용한다.[state, state를 갱신할 수 있는 함수]
배열 형태로 리턴된다.2. onClick={() => setIsClicked(!isClicked)}
<button />
를 클릭할 때마다, isClicked 상태가 true
나, false
로 업데이트 된다.:: 설명
isClicked
이라는 state를 수정한다. setIsClicked
함수로 state를 업데이트 할 수 있다.setIsClicked
함수의 인자로 전달된 값으로 isClicked
값이 업데이트 된다.!isClicked
으로 인자로 전달해 업데이트 한다는 말은, 현재 isClicked
의 반대로(true면 false로, false면 true로) 저장한다는 말이다.isClicked
state가 업데이트 된다.import { useState } from "react";
import ReactDOM from "react-dom";
import "./index.css";
function Button(props) {
const [isClicked, setIsClicked] = useState(false);
return (
<button
className={`btn ${props.type === "like" ? "like" : ""}`}
onClick={() => setIsClicked(!isClicked)}>
{isClicked ? "좋아요" : "싫어요"}
</button>
);
}
ReactDOM.render(<Button type="like" />, document.getElementById("root"));
<Button />
에 type 을 추가했다. Button 컴포넌트에서 props 로 받을 수 있다. props.type
이 ‘like’이면 like-btn
이라는 class 속성이 추가된다.