오늘부터 React 스프린트를 시작했다. 트위터 클론을 리액트로 만드는 것이 이번 스프린트의 목표다. 스프린트 결과물이 실제 웹 사이트와 비슷한 모습이 될 수록 만드는 재미가 있다. 리액트로 이미 웹 애플리케이션을 만들어 호스팅 한 경험이 있어서 개념 설명을 따라가는 것은 어렵지 않았다. 오히려 전에는 잘 이해하지 못하고 그냥 복사 붙여넣기로 쓰던 코드들에 대해 왜 그렇게 되는지 고민하고 이해하는 시간을 가질 수 있었다. JSX에서 중괄호 안에 JS 코드를 쓸 수 있는데 표현식만 쓸 수 있다. 그래서 if...else는 쓸 수 없고 삼항 조건 연산자만 쓸 수 있다. 전에는 그냥 예제들을 따라하다보니 자연스레 괄호 안에는 변수 선언을 하지 않았는데 이런 규칙이 있었는지 오늘 처음 알게 되었다. (사실 전에는 statement와 expression의 정확한 구분도 몰랐다.)
선언형
무엇(What)에 집중하여 프로그래밍 하는 것
JSX를 사용한 선언형 프로그래밍 : 예를 들어, 명령형에서는 for 반복문을 사용해 리스트를 생성, 추가해야 했다면, JSX에서는 map()
(내장고차함수)을 사용해 리스트를 생성할 수 있다.
<ul>
{comments.map(comment => (
<li key={comment.id}>
<p>{comment.writer}</p>
<p>{comment.content}</p>
</li>
))}
</ul>
컴포넌트 기반
범용성
{}
) 안에 JS 표현식을 넣을 수 있다.컴포넌트에서 여러 요소를 return하고 있다면 반드시 전체를 감싸는 하나의 요소가 있어야 한다.
Fragments로 DOM에 별도의 노드를 추가하지 않고 여러 자식을 그룹화 할 수 있다.
// React Fragment
return (
<React.Fragment>
<ChildA />
<ChildB />
<ChildC />
</React.Fragment>
)
// Short Syntax
return (
<>
<ChildA />
<ChildB />
<ChildC />
</>
)
// cf. Fragment는 key를 속성으로 가질 수 있다.
class
속성은 className
으로 표기해야 한다.
JSX 내에서 JS 표현식을 쓸 때, 꼭 중괄호({}
) 안에 써야 한다. 중괄호를 사용하지 않으면 일반 텍스트로 인식한다.
JSX 안에서는 JS 표현식(expression)만 사용가능하다. 구문(statement)은 사용할 수 없다. 따라서 if...else
조건문은 쓸 수 없고 삼항연산자(? :
)를 사용한 조건 표현식만 쓸 수 있다. 표현식은 평가되어 하나의 값으로 귀결되는 것을 말한다.
<div>
{ (1+1===2) ? (<p>정답</p>) : (<p>오답</p>) }
</div>
React Element가 JSX로 작성되면 그 이름은 대문자로 시작해야 한다. 소문자로 시작하면 일반 HTML 엘리먼트로 인식한다. (이렇게 따로 작성된 JSX 컴포넌트를 사용자 정의 컴포넌트라고 부른다)
여러개의 HTML Element를 생성할 때는 map()
함수 사용하며, 반드시 각 요소에 key
속성을 넣어 주어야 한다. key
는 해당 요소를 식별할 수 있는 고유값이어야 한다.
function Comment() {
const content = comments.map(c => {
<li key={c.id}>
<p>{c.text}</p>
<p>{c.writer}</p>
</li>
});
return (
<ul>
{content}
</ul>
)
}
SPA를 쉽고 빠르게 개발할 수 있도록 만들어진 툴 체인이다.
빌드 툴 세팅에 대한 고민 없이 바로 개발을 시작할 수 있도록 해준다.
웹 애플리케이션을 개발하기 위해 필요한 패키지들(React, Babel, PostCSs, Webpack, Jest 등)을 포함한다.
Create React App으로 프로젝트를 시작하기
npx create-react-app <project-name>