1. JSX란? React에서의 JSX
const element = <h1>Hello, world!</h1>;
위 태그 문법은 JSX 라고 불리는 javascript를 확장한 리액트에서 차용하는 문법이다.
리액트와 함께 사용되는 이유는 리액트가 UI와 state 의 변화에 초점을 맞추는 라이브러리이기 때문에 자바스크립트 함수와 html 태그를 함께 사용하는 것이 효과적이기 때문이다.
즉, react 에서는 렌더링 로직이 ui로직 ( 이벤트 처리, state 변화, 데이터 준비방식) 과 밀접한 연관이 있다. 따라서 마크업인 html 태그와 함께 로직을 처리할 수 있는 JSX를 사용한다.
React에서 JSX 문법 사용이 필수는 아니지만, Javascript 코드와 함께 ui 관련 작업을 쉽게 할 수 있는 html 태그를 사용한다는 것이 리액트의 최종 목적을 달성하는데 도움을 주기 때문에 많은 개발자들이 사용한다.
2. JSX 도 표현식
function formatName(user) {
return user.firstName + ' ' + user.lastName;
}
const user = {
firstName: 'Harper',
lastName: 'Perez'
};
//함수 로직을 html 태그 안에서 {} 사용가능하다.
const element = (
<h1>
Hello, {formatName(user)}!
</h1>
);
JSX또한 표현식이라고 볼 수 있다. 리액트의 컴파일이 끝나면, JSX 표현식은 곧 Javascript 객체로 인식된다. 따라서 개발자들은 JSX 를 if , for, 변수 할당 등 표현식과 같이 사용할 수 있다. 여기서 리액트의 컴파일이란, Babel이 JSX를 React.createElement() 호출로 컴파일 하는 것을 말한다.
3. Babel에 의한 객체 생성
예를 들면,
const element = (
<h1 className="greeting">
Hello, world!
</h1>
);
위 JSX 문법 코드가 Babel 에 의해
const element = React.createElement(
'h1',
{className: 'greeting'},
'Hello, world!'
);
위 코드와 함께 컴파일된다. 그러면 아래와 같은 객체가 생성되는데
// 주의: 다음 구조는 단순화되었습니다
const element = {
type: 'h1',
props: {
className: 'greeting',
children: 'Hello, world!'
}
};
위와 같은 자바스크립트 객체가 생성된다. React 는 해당 객체를 읽은 후 virtual DOM을 구성하고 효율적으로 최신 상태로 유지한다.
+ 또한 jsx도 html과 같이 태그 안에 attribute 를 정의할 수 있다.
```jsx
const element = <a href="https://www.reactjs.org"> link </a>;
```
참고: https://ko.legacy.reactjs.org/docs/introducing-jsx.html
'Computer Programming > React' 카테고리의 다른 글
리액트 React Side effects와 useEffect hook (0) | 2023.05.16 |
---|---|
Redux(리덕스) 사용 이유 (Context와 차이점)와 작동방식 (0) | 2023.05.16 |
React의 App.js 코드 살펴보기 | 컴포넌트 렌더링하기 | package.json (0) | 2023.05.15 |
리액트 프로젝트 설치하기 (create-react-app or vite) (0) | 2023.05.14 |
[React] 리액트란? 리액트를 사용하는 이유? (vs. Vanilla js) (0) | 2023.05.14 |