React는 페이스북(현 메타)에서 개발한, 사용자 인터페이스(UI)를 만들기 위한 JavaScript 라이브R입니다.
핵심 철학:
JSX는 JavaScript를 확장한 문법으로, JavaScript 파일 내에서 HTML과 매우 유사한 형태로 UI 구조를 작성할 수 있게 해줍니다.
주요 규칙:
<div>나 <>(Fragment)를 사용)className 사용: HTML의 class 속성 대신 className을 사용합니다. (class는 JavaScript의 예약어){}를 사용하면 JSX 내부에 JavaScript 변수나 표현식을 넣을 수 있습니다.onclick 대신 onClick, background-color 대신 style={{ backgroundColor: 'red' }}와 같이 이벤트 핸들러나 스타일 속성은 카멜 케이스로 작성합니다.function App() {
const name = "React";
return (
<div className="container">
<h1>Hello, {name}!</h1>
<p>This is a JSX example.</p>
</div>
);
}
컴포넌트는 UI를 구성하는 독립적이고 재사용 가능한 최소 단위입니다. 현대 React에서는 주로 함수형 컴포넌트를 사용합니다.
함수형 컴포넌트: JavaScript 함수이며, props라는 객체를 인자로 받아 화면에 렌더링될 React 엘리먼트(JSX)를 반환합니다.
특징:
// Greeting.js - 재사용 가능한 컴포넌트
function Greeting(props) {
return <h2>Hello, {props.name}!</h2>;
}
// App.js - 컴포넌트 합성
function App() {
return (
<div>
<Greeting name="Alice" />
<Greeting name="Bob" />
</div>
);
}
Props는 부모 컴포넌트에서 자식 컴포넌트로 데이터를 전달하기 위한 메커니즘입니다. React의 핵심적인 단방향 데이터 흐름(One-way Data Flow)을 구성합니다.
핵심 특징:
props를 절대 직접 수정해서는 안 됩니다. 이는 데이터 흐름을 예측 가능하게 만드는 중요한 원칙입니다.props를 하나의 객체로 전달받습니다.// ParentComponent.js
function ParentComponent() {
const userData = { name: "Charlie", age: 30 };
return <ChildComponent user={userData} />;
}
// ChildComponent.js
function ChildComponent(props) {
// props.user는 { name: "Charlie", age: 30 } 객체
return (
<p>
Name: {props.user.name}, Age: {props.user.age}
</p>
);
}
useState): 컴포넌트의 기억 장치State(상태)는 컴포넌트가 내부적으로 소유하고 관리하는, 변할 수 있는 데이터입니다. 사용자의 인터랙션 등으로 인해 변경될 수 있는 모든 값은 State로 관리해야 합니다.
React의 핵심 원리: State가 변경되면, React는 해당 컴포넌트를 자동으로 다시 렌더링(Re-render)하여 화면을 업데이트합니다.
useState Hook: 함수형 컴포넌트에서 State를 사용할 수 있게 해주는 Hook입니다.
const [currentState, setStateFunction] = useState(initialState);currentState: 현재 상태 값.setStateFunction: 상태를 갱신하는 함수. 이 함수를 통해서만 상태를 변경해야 합니다.initialState: 상태의 초기값.import React, { useState } from 'react';
function Counter() {
// count 상태를 0으로 초기화
const [count, setCount] = useState(0);
const increment = () => {
// setCount 함수를 호출하여 count 상태를 갱신
setCount(count + 1);
};
return (
<div>
<p>You clicked {count} times</p>
<button onClick={increment}>Click me</button>
</div>
);
}
props를 수정할 수 없습니다.useState)로 관리합니다.