JSX 정의와 역할
JSX란

A syntax extension to JavaScript (자바스크립트 문법의 확장)
JavaScript + XML/HTML , JavaScript and XML의 앞글자를 따서 JSX라 한다.
자바스크립트 코드와 HTML 코드를 같이 쓰는 형태
const element = <h1>Hello, world!</h1>
쉽게 말해 HTML 태그를 JavaScript 문법과 같이 사용할 수 있다.
JSX 역할
JSX는 내부적으로 XML, HTML 코드를 자바스크립트 코드로 변환하는 과정을 거쳐서 최종적으론 자바스크립트 코드가 나온다. 이때 리액트의 createElement가 변환하는 역할을 맡는다.
// JSX 사용한 코드
class Hello extends React.Component {
render () {
return <div>Hello {this.props.toWhat}</div>;
}
}
ReactDOM.redner(
<Hello toWhat="World" />,
document.getElementById('root')
);
// JSX 사용하지 않은 코드 - 순수한 자바스크립트 코드
// JSX 부분이 createElement로 대체 가능
class Hello2 extends React.Component {
render () {
return React.createElement('div',null,'Hello ${this.props.toWhat}');
}
}
ReactDOM.redner(
React.createElement(Hello2, { toWhat: 'World' }, null),
document.getElementById('root')
);
React.createElement 함수 호출의 결과로 자바스크립트 객체가 반환된다.
const element = {
type: 'h1',
props: {
className: 'greeting',
chidren : 'Hello, world!'
}
}
이 객체를 React Element를 부른다. 리액트는 React Element를 읽어서 DOM를 만들고 항상 최신 상태를 유지하게 된다.
React createElement의 입력값들을 알아보자
React.createElement(type, [props], [... children] )
- type: div, span 같은 tag type문자열 or 리액트 컴포넌트
- props: 속성들이 들어간다.
- children: 엘리먼트가 갖고 있는 자식 element들
JSX의 장점 및 사용법
JSX 장점
- 간결한 코드와 가독성 향상
- Injection Attacks 방어
Injection Attack : 문자, 숫자 같은 일반적인 데이터가 아닌 소스 코드를 입력하여 해당 코드가 실행되도록 하는 해킹 방법
- 리액트 돔은 렌더링 전에 임베딩된 값을 모두 문자열로 변환한다.
- XSS(크로스 사이트 스크립팅) 방어가 가능하다.
JSX 사용법
- 자바스크립트 변수나 함수를 사용하려면 { } 안에 사용해야 한다.
// 변수 사용
const name = '홍길동';
const element = <h1>안녕 , {name}</h1>;
ReactDOM.render(
element,
document.getElementById('root')
);
// 함수 사용
function formatName(user) {
return user.firstName + ' ' + user.lastName;
}
const user = {
firstName: 'Gildong',
lastName: 'Hong'
}
const element = (
<h1>
Hello, {formatName(user)}
</h1>
);
- 태그의 속성 넣는 방법
문자열로 넣으려면 큰따옴표(" ")로 넣어야 하고 , 자바스크립트 코드는 { }에 넣어야 한다.
// 큰따옴표 사이에 문자열 넣기
const element = <div tabIndex="0"></div>;
// 자바스크립트 코드 넣기
const element = <img src={user.avatarUrl}></img>;
- 자식(Children)을 정의하는 방법
const element = (
<div>
<h1>안녕하세요</h1>
<h2>열심히 리액트를 공부해봅시다!</h2>
</div>
);
[무료] 처음 만난 리액트(React) - 인프런 | 강의
자바스크립트와 CSS 기초 문법과 함께 리액트의 기초를 탄탄하게 다질 수 있습니다., 깔끔한 강의자료, 꼼꼼한 설명으로쉽게 배우는 리액트 강의입니다. 👨🏫 리액트의 세계로초대합니다 💫
www.inflearn.com