복잡한 상태 관리를 해결하고 기능 개발에만 집중하기 위해
React는 컴포넌트에 집중하고 있는 프론트엔드 라이브러리
UI를 만들기위한 JS library
<div class="tweet">
<span class="userId>@walli</span>
<div class="contants">hello, my name is walli</div>
<div class="time">43 seconds ago</div>
</div>
//컴포넌트로 짠 코드
<Tweet userId="Walli" time="43">
hello, my name is walli
</Tweet>
ES6, JSX
자바스크립트의 확장 문법
JSX 문법을 사용하여 코드를 작성하면 바벨이 JS 코드로 변환시켜준다.
JSX는 JS로 변환되어야 하기 때문에 작성 규칙이 있다.
<div>
<div>
<h1>hello</h1>
</div>
<div>
<h2>walli</h2>
</div>
</div>
class App extends Component {
render() {
const name = 'walli';
return {
<div>
hello{name}!//{}사용
</div>
};
}
}
<div>
{
(1 + 1 === 2) ? (<h1>정답</h1>) : (<h1>탈락</h1>)
}
</div>
<div className='app-container'>hello</div>
JSX도 표현식이다.
if
구문 및 for loop
안에 사용하고, 변수에 할당하고, 인자로서 받아들이고, 함수로부터 반환할 수 있다.const element = <div tabIndex="0"></div>
const element = <img src={user.avatarUrl}><img>/
const element = {
<div>
<h1>Hello!</h1>
<h2>Good to see you here</h2>
</div>
}
Babel은 JSX를 React.createElement() 호출로 컴파일한다.
React.createElement()
는 인자로 주어지는 타입에 따라 새로운 React 엘리먼트를 생성하여 반환한다. JSX로 작성된 코드는 React.createElement() 를 사용하는 형태로 변환된다.
아래 뒤 코드는 동일하다.
const element = (
<h1 className="greeting">
Hello, world!
</h1>
);
const element = React.createElement(
'h1',
{className: 'greeting'},
'Hello, world!'
);
React.createElement
는 버그가 없는 코드를 작성하는 데 도움이 되도록 몇 가지 검사를 수행하며, 다음과 같은 객체를 생성한다.const element = {
type: 'h1',
props: {
className: 'greeting',
children: 'Hello, world!'
}
};
// 이러한 객체를 "React 엘리먼트" 라고 하며, 화면에 표시하려는 항목에 대한 설명이다.
// React는 이러한 객체를 읽은 후 DOM을 구성하고 최신으로 유지하는데 이러한 객체를 사용한다.
엘리먼트는 React 앱의 가장 작은 단위
//index.html
<div id="root"></div>
const element = <h1>Hello, world</h1>
ReactDOM.render(element, document.getElementById('root'));
//index.html
<div id="root"></div>
function clock () {
const element = (
<div>
<h1>Hello, world</h1>
<h2>It is {new Date().toLocaleTimeString()}.</h2>
</div>
);
ReactDOM.render(element, document.getElementById('root'));
//setInterval이 실행될 때마다 element를 생성하고 루트 DOM 노드에 렌더링하는 방식으로 업데이트
}
setInterval(clock, 1000);
React.createElement(component, props, ...children)
를 호출하기 위한 문법 설탕이다.// JSX로 작성
class Hello extends React.Component {
render() {
return <div>Hello {this.props.toWhat}</div>;
}
}
ReactDOM.render(
<Hello toWhat="World"/>,
document.getElementById('root')
);
// JSX 사용 X
class Hello extends React.Component {
render() {
return React.createElement('div', null, `Hello ${this.props.toWhat}`)
}
}
ReactDOM.render(
React.createElement(Hello, {toWhat: 'World'}, null),
document.getElementById('root')
);
//app.js
import { add } from './math.js';
console.log(add(10, 20)); // 30
// math.js
export function add (a, b) {
return a + b;
}