오늘부터 리액트에 대해 정리해보겠다. 졸작 때 아무것도 모르는채로 jsx 파일 이것저것 갖다 붙여 쓴 기억이.. (PTSD)
약 한달동안 리액트 마스터해보자!!!
또한 이 정리는 리액트를 다루는 기술
책과 유레카 강사님 강의를 매우 많이 거의 다 참고합니다.
리액트(React)는 사용자 인터페이스(UI)를 구축하기 위한 JavaScript 라이브러리로 META(구 페이스북)에서 사용자 편의성 측면에서 개발하였다.
-> 즉 밀키트 같이 다 퍼주는 프레임워크와는 다른 개념이다.
-> 물론 데이터 처리량이 많을 때는 유용하지만 조금의 렌더링만 필요한 과정은 굳이 전체를 비교하지 않고 한번에 렌더링하는 것이 효율적일 수 있다.
create-react-app
, Babel, Webpack) 및 패키지 관리자(npm 또는 yarn) 제공.주의: 브라우저에서 실행되는 React 코드 자체는 Node.js 불필요하나, 개발 과정에서는 필수적임.
JavaScript XML의 약자로, JavaScript 내에서 HTML과 유사한 마크업을 작성할 수 있게 해주는 JavaScript의 구문 확장이다.
React에서 UI를 어떻게 구성할지 표현하기 위해 주로 사용된다.
(React 전용 문법은 아니지만, React에서 매우 흔하게 사용).
이는 시각적으로 UI 구조를 파악하기 쉽고, 개발자가 더 직관적으로 컴포넌트의 렌더링 결과를 작성할 수 있도록 도와준다.
브라우저는 JSX를 직접 이해하지 못함!!
그래서 개발자가 JSX로 코드를 작성하면, Babel과 같은 트랜스파일러(Transpiler)를 통해 일반적인 JavaScript 코드로 변환된다.
JSX 표현식은 React.createElement(component, props, ...children)
함수의 호출로 변환되어, 결과적으로 JavaScript 객체를 생성하고 React는 이 객체를 읽어 실제 DOM을 구성한다.
const element = <h1 className="greeting">Hello, world!</h1>;
// Babel 변환 후 아래 코드와 같이 됨
const element = React.createElement(
'h1',
{className: 'greeting'},
'Hello, world!'
);
하나의 최상위 요소(Root Element):
JSX 표현식은 반드시 하나의 부모 요소로 감싸져야 함.
여러 요소를 반환해야 할 경우, <div>
등으로 묶거나 불필요한 DOM 노드를 추가하지 않는 (Fragment)<>...</>
를 사용해야 함.
// 잘못된 예시 (두 개의 최상위 요소)
// return (
// <h1>Hello</h1>
// <h2>World</h2>
// );
// 올바른 예시 (Fragment 사용)
return (
<>
<h1>Hello</h1>
<h2>World</h2>
</>
);
JavaScript 표현식 포함:
{}
로 감싸야 함.const name = "React";
const element = <h1>Hello, {name}!</h1>; // Hello, React!
const result = <div>{1 + 1}</div>; // 2
어트리뷰트(Attributes) / 속성(Props):
class
대신 className
사용.kebab-case
지만, JSX에서는 대부분 camelCase
로 작성함.""
사용.{}
사용.const url = 'image.jpg';
const element = <img src={url} className="profile-pic" alt="Profile" />;
태그는 반드시 닫아야 함:
HTML과 달리, JSX에서는 자식 요소가 없는 태그(예: <br>
, <img>
, <input>
)도 반드시 스스로 닫는 태그 (/>
) 형태여야 함.
// 올바른 예시
<br />
<img src="path/to/image.png" alt="description" />
<input type="text" />
// 잘못된 예시 (HTML에서는 가능하지만 JSX에서는 오류)
// <br>
// <img src="...">
주석:
{/* ... */}
형식을 사용함.const element = (
<div>
{/* 이것은 주석입니다 */}
<h1>Hello</h1>
</div>
);