프론트엔드 개발을 위한 자바스크립트 오픈소스 라이브러리
👉 선언형(Declarative)
👉 컴포넌트 기반(Component-Based)
👉 범용성(Learn Once, Write Anywhere)
HTML을 JS처럼 편리하게 사용하기 위한 리액트 JS 확장 문법
👉 DOM: HTML
CSS
JavaScript
👉 React JSX: CSS
JSX
React는 JSX를 이용하여 DOM 코드보다 명시적으로 코드를 작성 할 수 있기 때문이다.
DOM에서는 JavaScript를 사용하기 위해 script 태그 등을 통해 JavaScript와 HTML을 연결한다.<script src="src/index.js></script>
하지만 React에서는 JavaScript 문법과 HTML 문법을 동시에 이용해 기능과 구조를 한눈에 확인할 수 있다.
return( <> <h1> Hello, {Name(user)}! </h1> </> )
위와 같이 구조와 동작에 대한 코드를 한 뭉치로 적은 코드셋을 컴포넌트라 한다.
JSX 없이 React 요소를 만들 수 있다. 다만, 코드가 복잡해지고 가독성이 떨어지는 단점이 있다.
👉 하나의 엘리먼트 안에 모든 엘리먼트가 포함
// 잘못된 예시
<div>
<h1>Hello</h1>
</div>
<div>
<h1>Hello</h1>
</div>
// 올바른 예시
<div>
<div>
<h1>Hello</h1>
</div>
<div>
<h1>Hello</h1>
</div>
</div>
👉 엘리먼트 클래스 사용 시, className으로 표기
<div className="textBox"> Hello </div>
👉 JavaScript 표현식 사용 시, 중괄호 {}
이용
function App() {
const name = 'Jone';
return (
<div>
Hello, {name}
</div>
);
}
👉 사용자 정의 컴포넌트는 대문자로 시작(PascalCase)
function Hello() {
return <div>Hello</div>
}
👉 조건부 렌더링에는 삼항 연산자 사용
<div>
{
(1+1 === 2) ? (<p>정답</p>) : (<p>탈락</p>)
}
</div>
👉 여러 개의 HTML 엘리먼트를 표시할 때, map() 함수 이용
key
JSX 속성을 넣어야 한다.const content = posts.map(post) => {
<div key={post.id}>
<h3>{post.title}</h3>
</div>
}
하나의 기능 구현을 위한 여러 종류의 코드 묶음이다.
const Component = () => {
return(
<>
<div>{정의1}</div>
<div>{정의2}</div>
</>
)
}
const user = {
firstName: "HTML",
lastName: "DOM"
};
function formatName(user) {
return user.firstName + " " + user.lastName;
}
const heading = document.createElement("h1");
heading.textContent = `Hello, ${formatName(user)}`;
document.body.appendChild(heading);
import React from "react";
function App() {
const user = {
firstName: "React",
lastName: "JSX Activity"
};
function formatName(user) {
return user.firstName + " " + user.lastName;
}
return <h1>Hello, {formatName(user)}!</h1>;
}
export default App;
map
을 활용const posts = [
{
id: 1,
title: "Hello World",
content: "Welcome to learning React"
},
{
id: 2,
title: "Installation",
content: "You can install React from npm"
}
];
export default function App() {
const postToJSX = (post) => {
return (
<div key={post.id}>
<h3>{post.title}</h3>
<p>{post.content}</p>
</div>
);
};
return (
<div className="App">
<h1>Hello JSX</h1>
{posts.map(postToJSX)}
</div>
);
}