React에서 자주 쓰이는 주요 속성들인 ref, key, className, onClick, style, children에 대해 정리한 문서이다.
focus, scroll, style 등을 직접 조작할 때 사용import { useRef, useEffect } from 'react';
function FocusInput() {
const inputRef = useRef<HTMLInputElement>(null);
useEffect(() => {
inputRef.current?.focus();
}, []);
return <input ref={inputRef} />;
}
ref는 일반적인 props와는 달리, 실제 HTML 요소를 참조하는 특수한 prop입니다.
keyReact는 리스트 요소들을 다시 그릴 때, key를 기준으로 "이전 요소와 같은지" 판단합니다. key가 같으면 재사용, 다르면 다시 렌더링합니다.
const fruits = [
{ id: 'a1', name: '🍎 사과' },
{ id: 'b2', name: '🍌 바나나' },
{ id: 'c3', name: '🍇 포도' },
];
return (
<ul>
{fruits.map((fruit) => (
<li key={fruit.id}>{fruit.name}</li>
))}
</ul>
);
❗ 단순히
index를 key로 사용하는 것은 항목의 순서가 바뀌는 경우 예기치 않은 렌더링 문제가 생길 수 있으므로 주의해야 합니다.
classNameclass 대신 React에서는 className을 사용해야 합니다. (JS 예약어 class와 충돌 방지)<div className="card-container">Hello</div>
onClick, onChange, onSubmit 등onclick ❌ → onClick ✅)<button onClick={() => alert("눌렀어요!")}>Click Me</button>
<input onChange={(e) => console.log(e.target.value)} />
stylecamelCase로 표기합니다.<div style={{ backgroundColor: 'skyblue', padding: '20px' }}>
스타일이 적용된 박스
</div>
childrenfunction Card({ children }: { children: React.ReactNode }) {
return <div className="card">{children}</div>;
}
<Card>
<h2>제목</h2>
<p>내용입니다</p>
</Card>
HTML 태그에서 사용하는 전통적인 속성. 브라우저가 직접 해석해서 동작합니다.
<!-- HTML에서의 attributes -->
<input type="text" placeholder="이름을 입력하세요" />
type, placeholder, disabled, checked, value 등은 HTML이 해석하는 속성입니다.컴포넌트에 데이터를 전달하는 수단입니다. JavaScript 객체의 형태로 전달되며, JS 내부에서 자유롭게 사용할 수 있습니다.
function Welcome({ name }: { name: string }) {
return <h1>Hello, {name}</h1>;
}
<Welcome name="민수" />
name은 props이며, 함수의 인자로 전달되어 컴포넌트 내부 로직에 활용됩니다.| 항목 | attributes | props |
|---|---|---|
| 정의 위치 | HTML | React 컴포넌트 내부 |
| 사용 목적 | HTML 요소 제어 | 컴포넌트 데이터 전달 |
| 처리 주체 | 브라우저 | React 렌더링 엔진 |
| 데이터 흐름 | 단방향 | 단방향 (상위 → 하위) |
| 커스터마이징 가능 여부 | 제한적 | 완전 자유 |
React에서는 props가 실제 DOM 요소에도 전달될 수 있는데,
HTML 태그가 인식하지 못하는 props가 그대로 전달되면 경고가 발생합니다.
const Box = styled.div<{ highlight: boolean }>`
background-color: ${(props) => (props.highlight ? "yellow" : "white")};
`;
<Box highlight={true}>강조된 박스</Box>
⚠️ 경고: React does not recognize the 'highlight' prop on a DOM element
highlight는 HTML의 표준 속성이 아니므로,
styled-components에서 $로 시작하는 prop은
DOM으로 전달되지 않고 스타일 계산에만 사용됩니다.
const Box = styled.div<{ $highlight: boolean }>`
background-color: ${(props) => (props.$highlight ? "yellow" : "white")};
`;
<Box $highlight={true}>강조된 박스</Box>
✅ 결과:
$highlight는 오직 styled-components 내부에서만 사용됨
실제 HTML에는 전달되지 않음 → 경고 없음, DOM 깔끔하게 유지