State는 React 컴포넌트에서 사용되는 동적인 값이나 상태를 관리하는 객체입니다. 값이 변경되면 자동으로 관련된 컴포넌트가 재렌더링되므로, 양방향 렌더링을 지원합니다. 일반적으로 이벤트와 함께 사용되며, 컴포넌트 내부에서 변경 가능한 데이터를 관리할 때 사용됩니다.
useState 가져오기
React 모듈에서 useState를 불러와야 합니다.
import { useState } from 'react';
useState 선언하기
상태와 상태를 변경하는 함수를 선언합니다.
const [state, setState] = useState(초기값);
state: 현재 상태값setState: 상태를 업데이트하는 함수setState와 같은 함수를 통해 이루어져야 하며, 이를 통해 상태와 UI가 항상 동기화됩니다.import './App.css';
let count = 0;
function increase() {
++count;
document.getElementById("cnt1").textContent = count;
}
function App() {
return (
<div>
<p id='cnt1'>{count}</p>
<button onClick={increase}>증가</button>
</div>
);
}
export default App;
import { useState } from "react";
import './App.css';
function App() {
const [count, setCount] = useState(0);
return (
<div>
<p>{count}</p>
<button onClick={() => setCount(i => i + 1)}>증가</button>
<button onClick={() => setCount(i => i - 1)}>감소</button>
<button onClick={() => setCount(0)}>리셋</button>
</div>
);
}
export default App;
State를 객체로 관리할 수도 있습니다. 이 경우, 기존 상태를 변경하지 않고 새로운 객체를 반환해야 합니다.
const [state, setState] = useState({ key: value });
State를 사용하는 것은 React 애플리케이션에서 동적인 데이터를 효과적으로 관리하고 UI를 동기화하는 데 필수적입니다. 일반 변수로 상태를 관리할 경우 수동으로 DOM을 조작해야 하므로, React의 useState를 활용하여 효율적인 개발이 가능합니다.
state 예제
// #4 문제
// 토글 버튼을 만드세요
// 1. state 값을 true로 놓기
// 2.state가 ture일시 화면에 <h1>가게가 오픈되었습니다</h1> 출력
// 3. 버튼을 놓고 버튼의 문구는 {개,폐장}
// 4. 해당 버튼을 눌렀을 시 state 값이 false로 변경
// 5. state가 false가 되었을 시 화면에 <h1>영업중이 아닙니다</h1> 출력
import { useState } from "react";
import './App.css'
function App(){
const [toggle, setToggle]= useState(true);
const openclose=()=>{
(toggle == true) ? setToggle(toggle => false) : setToggle(toggle => true)
}
return(
<div>
<h1>{toggle == true? "가게를 오픈했습니다" : "가게를 닫았습니다"}</h1>
<button onClick={openclose}>{toggle == true ? "close" : "open"}</button>
</div>
)
}
export default App
import { useState } from "react";
import './App.css'
function App(){
const[toggle,setToggle] = useState(true)
return(
<div>
<button onClick={()=>setToggle(toggle=>!toggle)}>{toggle?"폐장":"개장"}</button>
{toggle? <h1>가게가 오픈되었습니다</h1>:<h3>영업중이 아닙니다</h3>}
</div>
)
}
export default App

//#5 문제 <ip/down>
//업다운 게임을 만드세요
//1. state 값을 입력값인 input1과 고정값인 currentValue 두개를 만든다
//2. 태그는 각각 업다운 문구를 나타내는 h1 태그와 실행 버튼, 그리고 input 태그로 구성한다
//3. 해당 input 태그는 onChange 이벤트로 해당 데이터의 내용을 실시간으로 갱신하도록 만든다
//4. {실행} 버튼을 누르게 되면 입력 값인 input1과 currentValue를 비교하여 만약 input1의 값이
// currentValue 값보다 작다면 "업" 크다면 "다운" 같다면 "밎췄습니다"를 출력
//*참고 : onChange 에 state 함수를 걸어 데이터를 실시간으로 받을 수 있다.
import { useState } from "react";
import './App.css'
let random = parseInt(Math.random()*100)+1 // 1~100까지 랜덤 값
console.log(random)
function App(){
const [input1,setInput1] = useState(0)
const [num,setNum] = useState(random)
const [result,setResult] = useState("")
function updown(){
if(input1 == num){
setResult("정답!")
}else if(input1>num){
setResult("DOWN")
}else{setResult("UP")}
}
return(
<div>
<h1>{result}</h1>
<input type="number" value={input1} onChange={e=> setInput1(e.target.value)} />
<button onClick={updown}>UP!DOWN!</button>
</div>
)
}
export default App

//#6 가위바위보
//가위바위보 게임을 만드세요
// 1. 사용자의 상태값을 받는 user 상태값과 , 컴퓨터 상태값을 받는 com 받는다
// 2. 사용자의 상태값을 input 창을 통해서 입력 받는다
// 3. 버튼을 눌러 user와 com의 값을 비교한 후에 h1 태그에 출력하여
// 각각 "이겼습니다","졌습니다","비겼습니다"를 출력하는 게임을 만들어라