[ReactJS] JSX
2019. 5. 19. 02:47ㆍReactJS
JSX는 HTML 코드와 비슷하지만 자바스크립트로 변환됩니다.
리액트 컴포넌트를 사용할 때 쓰는 문법입니다.
꼭 닫혀야 하는 태그
<input type="text"> (x)
<input type="text" /> (o) - self closing tag
두개 이상의 Element는 무조건 하나의 Element로 감싸져 있어야 한다
// 따로 따로 Element가 있으면 error!
class ReactApp extents Component {
render(){
return (
<div>hello!!!</div>
<div>world!!</div>
)
}
}
// 이렇게 두 개의 div Element는 Element로 감싸져야 한다
class ReactApp extents Component {
render(){
return (
<div>
<div>hello!!!</div>
<div>world!!</div>
</div>
)
}
}
// React 16.2부터 도입된 Fragment를 쓰면 굳이 감싸기 용도 div를 안써도 됩니다.
import React,{Component, Fragment} from 'react';
class ReactApp extents Component {
render(){
return (
<Fragment>
<div>hello!!!</div>
<div>world!!</div>
</Fragment>
)
}
}
JSX 안에 JavaScript 값 사용 (바인딩)
// 중괄호 사용
import React,{Component, Fragment} from 'react';
class ReactApp extents Component {
render(){
const name = "react!";
return (
<div>
hello {name}
</div>
)
}
}
조건부 렌더링
JSX내부에선 조건부 렌더링을 할 때 if문을 사용할 수 없고 삼항 연산자, AND연산자를 사용합니다.
// 삼항연산자
import React,{Component, Fragment} from 'react';
class ReactApp extents Component {
render(){
const name="JEAN"
return (
<div>
{
1+1 ===2? (<div>맞다!</div>): (<div>틀리다!</div>)
name === 'JEAN' && <div>JEAN!!</div>
(function(){
if(name==='JEAN') return <div>JEAN입니다</div>
if(name==='JIN') return <div>JIN입니다</div>
return <div>둘 다 아니다</div>
})() //함수를 감싸고 바로 호출
}
</div>
)
}
}
class말고 className!
일반적인 HTML에서는 class라는 예약어가 있는데 JSX에서는 className이라는 것을 주의합니다. 현재는 에러가 나지는 않지만 컨벤션을 잘 지키는 게 중요합니다
참고
누구든지 하는 리액트 : 초심자를 위한 react핵심 강좌 (inflearn)
'ReactJS' 카테고리의 다른 글
[ReactJS] React Component LifeCycle API (0) | 2019.05.20 |
---|---|
[ReactJS] state / props (0) | 2019.05.19 |
[ReactJS] 리액트 컴포넌트, 엘리먼트 (0) | 2019.05.19 |
[React] Webpack과 Babel (0) | 2019.05.18 |
[React] React Virtual DOM (0) | 2019.05.18 |