⚛️ React
4. 동적(useState)
복숭아아이스티에샷추가
2024. 2. 23. 16:00
1. 동적인 컴포넌트를 만들어보자
예제 1 ) Counter 컴포넌트 (: 버튼을 누르면 숫자가 바뀌는 컴포넌트)
(1) src 디렉터리에 Counter.js 파일을 생성한다.
// src/Counter.js
import React from 'react';
function Counter() {
return (
<div>
<h1>0</h1>
<button>+1</button>
<button>-1</button>
</div>
);
}
export default Counter;
(2) App.js 파일에서 Counter 를 렌더링한다.
src/App.js
import React from 'react';
import Counter from './Counter';
function App() {
return (
<Counter />
);
}
export default App;
하지만 아직은 +1 혹은 -1 을 눌렀을 때 아무런 변화가 없다.
(3) 이벤트 설정
: Counter 에서 버튼이 클릭되는 이벤트가 발생했을 때 특정 함수가 호출되도록 설정하기
먼저 Counter.js 파일을 아래와 같이 수정한다.
src/Counter.js
import React from 'react';
function Counter() {
const onIncrease = () => {
console.log('+1');
}
const onDecrease = () => {
console.log('-1');
}
return (
<div>
<h1>0</h1>
<button onClick={onIncrease}>+1</button>
<button onClick={onDecrease}>-1</button>
</div>
);
}
export default Counter;
(4) 동적인 값 추가하기 ( useState )
컴포넌트에서 동적인 값을 상태(state) 라고 부른다.
useState 라는 함수를 사용하면, 컴포넌트에서 상태를 관리할 수있다.
Counter.js 파일을 아래와 같이 수정한다.
// src/Counter.js
// useState 함수를 사용하려면 리액트 패키지에서 불러야한다.
import React, { useState } from 'react';
function Counter() {
// 상태의 기본값(0)을 파라미터로 넣어서 호출해주면 된다.
const [number, setNumber] = useState(0);
const onIncrease = () => {
setNumber(number + 1);
}
const onDecrease = () => {
setNumber(number - 1);
}
return (
<div>
<h1>{number}</h1>
<button onClick={onIncrease}>+1</button>
<button onClick={onDecrease}>-1</button>
</div>
);
}
export default Counter;
지금 한 방식은 +1을 함으로써 새롭게 업데이트 된 값을 다시 파라미터에 넣는 것이다.
하지만 그 대신, 값 자체를 바로 업데이트 할 수 있는 방법도 있다.
(5) 함수형 업데이트
: 새로운 값을 파라미터로 넣어 업데이트 하는 것이 아니라, 함수를 등록하여 값을 업데이트할 수 있다.
// src/Counter.js
import React, { useState } from 'react';
function Counter() {
const [number, setNumber] = useState(0);
const onIncrease = () => {
setNumber(prevNumber => prevNumber + 1);
}
const onDecrease = () => {
setNumber(prevNumber => prevNumber - 1);
}
return (
<div>
<h1>{number}</h1>
<button onClick={onIncrease}>+1</button>
<button onClick={onDecrease}>-1</button>
</div>
);
}
export default Counter;
onIncrease 와 onDecrease 에서 setNumber 를 사용할 때, 값을 업데이트하는 함수를 파라미터로 넣은 것이다.
이렇게 함수형 업데이트는 주로 나중에 컴포넌트를 최적화할 때 사용한다.