[React] {useState} 이용하기

2024. 9. 10. 22:55WebFront/React

useState의 인수로는 사용할 초기값을 넘겨준다. 아무런 값도 없으면 underfined가 나온다. useState의 반환값은 배열이다. 첫번째 원소로 state를 사용할 수 있고, 두 번째 원소인 setState 함수를 사용해 state값을 변경할 수 있다. 

import {useState} from 'react'

const [state, setState] = useState(initialState)

 

아래는 숫자를 증가시키는 기능을 useState를 이용해서 적용하였다. React는 return값을 비교해서 렌더링이 되기 때문에 자동으로 적용되지 않아 useState를 이용해야만 했다. 

 

숫자 증가 기능

console.clear();

import React, { useState } from "https://cdn.skypack.dev/react@18";
import ReactDOM from "https://cdn.skypack.dev/react-dom@18";

const App = () => {
	const [number, setNumber] = useState(1);

	return <div>
		<div>number : {number}</div>
		<button onClick={() => setNumber(number+1)}>증가</button>
	</div>
};

ReactDOM.render(<App />, document.getElementById("root"));

숫자 증가 기록

console.clear();

import React, { useState } from "https://cdn.skypack.dev/react@18";
import ReactDOM from "https://cdn.skypack.dev/react-dom@18";

const App = () => {
	const [number, setNumber] = useState(1);
	const [recordNumber, setRecordNumber] = useState(null);

	return <div>
		<div>number : {number}</div>
		<div>기록된 숫자 : {recordNumber}</div>
		<button onClick={() => setNumber(number+1)}>증가</button>
		<button className="ml-4" onClick={() => {
				if(number === 0) return
				setNumber(number-1)
			}}>감소</button>
		<button className="ml-4" onClick={() => {
							setRecordNumber(number);
							setNumber(0);
										}}>기록</button>
		<button className="ml-4" onClick={() => setNumber(0)}>
			초기화
		</button>
	</div>
};

ReactDOM.render(<App />, document.getElementById("root"));

 

숫자 증가 기록 배열

JSON.stringify는 JavaScript 값이나 객체를 JSON 문자열로 변환합니다. 

console.clear();

import React, { useState } from "https://cdn.skypack.dev/react@18";
import ReactDOM from "https://cdn.skypack.dev/react-dom@18";

const App = () => {
	const [number, setNumber] = useState(1);
	const [recordNums, setRecordNums] = useState([]);
	const saveRecord = () => {
		setNumber(0);
		setRecordNums([...recordNums, number]);
	}
	const clearRecord = () => {
		setNumber(0);
		setRecordNums([]);
	}

	return <div>
		<div>number : {number}</div>
		<div>기록 된 숫자 : {JSON.stringify(recordNums)}</div>
		<button onClick={() => setNumber(number+1)}>증가</button>
		<button className="ml-4" onClick={() => {
				if(number === 0) return
				setNumber(number-1)
			}}>감소</button>
		<button className="ml-4" onClick={saveRecord}>기록</button>
		<button className="ml-4" onClick={clearRecord}>
			초기화
		</button>
	</div>
};

ReactDOM.render(<App />, document.getElementById("root"));

 

https://codepen.io/ycraah/pen/eYwXmqK?editors=0011

 

useState 훅 이용

...

codepen.io

 

함수를 묶어서 정리

console.clear();

import React, { useState } from "https://cdn.skypack.dev/react@18";
import ReactDOM from "https://cdn.skypack.dev/react-dom@18";

const App = () => {
	const [number, setNumber] = useState(1);
	const [recordNums, setRecordNums] = useState([]);
	const increaseNum = () => {
		setNumber(number + 1);
	}
	const decreaseNum = () => {
		if (number === 0 ) return;
		setNumber(number -1);
	}
	const saveRecord = () => {
		setNumber(0);
		setRecordNums([...recordNums, number]);
	}
	const clearRecord = () => {
		setNumber(0);
		setRecordNums([]);
	}

	return <div>
		<div>number : {number}</div>
		<div>기록 된 숫자 : {JSON.stringify(recordNums)}</div>
		<button onClick={increaseNum}>증가</button>
		<button className="ml-4" onClick={decreaseNum}>감소</button>
		<button className="ml-4" onClick={saveRecord}>기록</button>
		<button className="ml-4" onClick={clearRecord}>
			초기화
		</button>
	</div>
};

ReactDOM.render(<App />, document.getElementById("root"));

 

 

'WebFront > React' 카테고리의 다른 글

[React] map 이용하기  (1) 2024.09.18
[React] css 적용 / 테일윈드 적용  (1) 2024.09.10
[React] 함수 생성  (0) 2024.09.09
[React] 기본 세팅  (0) 2024.09.09