function MyComp() { … } 또는 const MyComp = () => { … } class MyComp extends React.Component { render() { … } } (현재는 거의 사용하지 않음) <div> 또는 <></>) {} 안에 작성 class → className for → htmlFor <input />, <img /> 등 반드시 닫기 {cond ? <A /> : <B />} && 연산자: {cond && <A />} {items.map(item => <li key={item.id}>{item.name}</li>)}부모 → 자식으로 데이터(속성) 전달
컴포넌트 함수의 매개변수(props)로 받음
구조 분해 할당으로 간결화:
function Profile({ name, age }) { … }
전개 연산자를 이용해 객체를 한 번에 넘길 수도 있음:
<Profile {...person} />
defaultProps 로 기본값 설정
useState 훅import { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0); // 초기값 0
return (
<div>
<p>현재 카운트: {count}</p>
<button onClick={() => setCount(count + 1)}>+1</button>
</div>
);
}
useState(초기값) 호출 시 → [값, 설정함수] 배열 반환
setCount(newValue) 를 호출하면:
useState는 React 내부의 Hooks 메모리 저장소에 상태값을 저장setState를 사용하지 않고 변수만 바꾸면 리렌더링되지 않음setState 호출을 기준으로 변경을 감지useState의 값은 유지됨useState(초기값)의 초기값은 처음 마운트 시 딱 한 번만 사용됨setCount(count + 1);
setCount(count + 1);
이렇게 두 번 호출해도 값이 1씩 증가하지 않음.
setCount(prev => prev + 1);
setCount(prev => prev + 1); // 이러면 2 증가
| 항목 | 설명 |
|---|---|
| 직접 값 변경 금지 | count = count + 1 은 동작 안 함 |
| set함수 사용 필수 | 항상 setState로 변경해야 반영됨 |
| 비동기 처리됨 | 즉시 반영되지 않고, React 스케줄링 후 반영 |
| 초기값은 한 번만 | useState(초기값)의 초기값은 컴포넌트가 처음 실행될 때만 적용 |
useState(initial)의 initial은 한 번만 사용{}, self-closinguseState, setState, 리렌더링