‼ 중요 ‼
JSX 문법 8가지는 꼭 외울 것!!
오늘 하루 느낀점 : 빡세다 ..
Component
의 개념과 종류에 대해 설명할 수 있다.JSX
에 대한 정의와 기본 특성에 대해 설명할 수 있다.CRA
를 설치하고 폴더와 파일이 어떻게 구성되어 있는지 설명할 수 있다.UI를 자동으로 업데이트 해준다. 이로 인해 우리는 데이터 기반의 선언적 개발이 가능해지며, 자동으로 UI를 업데이트하는 과정에서 Virtual DOM (가상돔)을 통해 최적화된 업데이트를 할 수 있다.
Component 기반의 개발을 통해 복잡한 UI를 효과적으로 구성할 수 있으며, JSX 문법으로 컴포넌트를 편리하게 작성할 수 있습니다.
개발 방식에는 크게 절차적인 개발과 선언적인 개발이 있습니다.
절차적 : 문제를 어떻게 해결할 것인가?
선언적 : 무엇을 해결할 것인가?
프론트엔드 개발에서 바닐라 자바스크립트의 프로그래밍 방식이 절차적으로 프로그래밍 방식이고, 리엑트에게 전달해주면 "어떻게" 하는지에 대한 중간과정은 리엑트가 알아서 처리해줍니다.
export default App;
// App.js
import React from 'react'
const App = () => {
return <h1>This is Function Component!</h1>;
};
export default App;
리액트는 소문자로 시작하는 요소를 HTML 태그로 인식하기 때문에 컴포넌트명은 항상 첫 글자가 대문자가 되도록 작성해야 합니다.
선언한 컴포넌트는 다른 곳에서 import하여 사용할 수 있습니다.
// src/pages/ListPage/ListPage.js
import GNB from '../components/GNB/GNB';
import List from './List/List';
const ListPage = () => {
return (
<>
<GNB />
<List />
</>
);
}
export default ListPage;
```
```javascript
// src/pages/ListPage/List/List.js
import ListTitle from './ListTitle/ListTitle';
import ListItem from './ListItem/ListItem';
const List = () => {
return (
<>
<ListTitle />
<div className="listContainer">
<ListItem />
<ListItem />
.
.
.
</div>
</>
);
}
export default List;
JSX(JavaScript Syntax eXtension)란 리액트에서 사용하는 자바스크립트 확장 문법입니다.
기존에 바닐라 자바스크립트를 통해 기능을 구현할 때는 HTML에서 markup(마크업) 된 부분들을 확인하면서 직접 해당 DOM에 접근하고, Event Listener를 부착하는 등 HTML과 자바스크립트 로직은 서로 긴밀하게 연결되어 있습니다.
JSX로 작성한 코드는 브라우저에서 동작하기 전에 Babel이라는 transcompiler를 통해 일반 자바스크립트 코드 형태로 변환됩니다.
JSX는 HTML과 자바스크립트 로직을 하나의 자바스크립트 파일 안에서 모두 처리하기 위해 확장한 문법입니다.
const element = (
<h1 className="greeting">
hello, world!
</h1>
);
const element = React.createElement(
'h1',
{calssName: 'greeting'},
'hello, world!'
);
.html
, .js
파일이 아닌 하나의 자바스크립트 파일에서 HTML 마크업과 자바스크립트 로직을 동시에 작성할 수 있기 때문에 편리합니다.const hi = <p>Hi</p>
// Greetings.js
import React from 'react'
const Greetings = () => {
const name = '김개발';
return <h1>{name}님, Welcome to Wecode!</h1>;
};
export default Greetings;
class
이지만 JSX에서는 className
을 사용해야 합니다.// HTML
<h1 class="greetings">Welcome to Wecode!</h1>
// JSX
<h1 className="greetings">Welcome to Wecode!</h1>
on
을 붙여 camelCase로 작성합니다.// JS
const title = document.getElementsByClassName('title')[0];
title.addEventListener('click', handleClick);
// JSX
<h1 className="title" onClick={handleClick}>Welcome to Wecode!</h1>
{ }
는 JSX 문법을 의미하며 안쪽의 { }
는 자바스크립트 객체를 의미합니다.// HTML
<h1 style="color:red;background-image:yellow">Welcome to Wecode!</h1>
// JSX
<h1 style={{ color: "red", backgroundImage: "yellow" }}>
Welcome to Wecode!
</h1>
<img>
와 같이 하나의 태그가 요소인 경우, 기존 HTML은 /
으로 끝내지 않아도 되지만, JSX에서는 <img />
와 같이 항상 /
으로 끝내줘야 합니다.<div />
와 <div></div>
는 같은 표현 입니다.// Bad
const Greetings = () => {
return (
<h1>김개발님!</h1>
<h2>위코드에 오신 걸 환영합니다!</h2>
);
}
// Good
const Greetings = () => {
return (
<div>
<h1>김개발님!</h1>
<h2>위코드에 오신 걸 환영합니다!</h2>
</div>
);
}
<React.Fragment>
입니다.const Greetings = () => {
return (
<>
<h1>김개발님!</h1>
<h2>위코드에 오신 걸 환영합니다!</h2>
</>
);
}