프런트 공부를 처음 시작하면 배우는 checkbox, radio 버튼, select를 react와 배우던 와중, 굉장히 이질적인 문장이 귀에 들어왔다. 바로
React의 value는 HTML 에서 value 와 다르다
무슨 뜻일까?
코드로 먼저 확인하자.
import React, { useState } from 'react';
const App016 = () => {
const [fruit, setFruit] = useState('grape');
const [key, setKey] = useState(1);
const resetSelect = () => setKey(prev => prev + 1);
const items = [
{ id: 1, name: 'Apple' },
{ id: 2, name: 'Banana' },
{ id: 3, name: 'Cherry' },
];
return (
<>
<h2>Controlled Component (value=)</h2>
<select value={fruit} onChange={(e) => setFruit(e.target.value)}>
<option value="apple">사과</option>
<option value="banana">바나나</option>
<option value="orange">오렌지</option>
<option value="grape">포도</option>
</select>
<p>Selected: {fruit}</p>
</>
);
};
export default App016;
e.target.value를 보자.
// HTML
<select value="apple"> // 초기값만 설정하고 이후 자유롭게 변경 가능
// React
<select value={fruit} onChange={(e) => setFruit(e.target.value)}>
// value와 onChange가 쌍으로 동작
const [fruit, setFruit] = useState('grape'); // state 관리
...
<select value={fruit} onChange={(e) => setFruit(e.target.value)}>
여기서 value는 단순한 속성이 아니라 React의 단방향 데이터 흐름을 구현하는 중요한 요소
사용자가 select를 변경하면:
- onChange 이벤트가 발생
- setFruit로 state 업데이트
- 컴포넌트 리렌더링
- 새로운 value 값이 select에 반영
React는 한 페이지 내에서 component가 변화될 때
const [count, setCount] = useState(0);
count: 현재 상태값
setCount: 상태를 업데이트하는 함수
0: 초기값
// ❌ 잘못된 방법
count = count + 1; // state 직접 수정
// ✅ 올바른 방법
setCount(count + 1); // setState 함수 사용
// 이전 상태값을 사용할 때의 올바른 방법
setCount(prevCount => prevCount + 1);
const [user, setUser] = useState({
name: 'John',
age: 25
});
// 객체 업데이트 시 spread 연산자 사용
setUser({
...user,
age: 26
});