🟢 JavaScript와 HTML을 섞어 쓸 수 있는 JavaScript의 확장된 문법이다.
const element = <h1>Hello, world!</h1>
브라우저에서 실행 전에 Babel을 이용해 자바스크립트로 변환이 된다.
그래서 스크립트 태그에 type을 babel로 설정해 주어야 한다.<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script> <script type=text/babel src="jsx.js"><script>
🔴 JavaScript 코드를 작성할 때에는 {}
안에 작성해야 한다.
const name = 'cloudcoke'
const element = <h1>Hello {name}</h1>
🔵 표현식 : 1 + 2
, user.name
, getList(list)
등 값으로 평가될 수 있는 것
🔴 if문과 for 루프는 JavaScript 표현식이 아니기 때문에 JSX 내부 JavaScript 표현식에는 사용할 수 없다.
그래서 JSX 주변 코드에서 if문을 사용하거나 {}
내부에서 삼항 연산자를 사용한다.
case 1) JSX 주변 코드에서 if문 사용
class Admin extends React.Component {
constructor(props) {
super(props);
this.state = {
level: "admin",
};
}
render() {
if (this.state.level === "admin") {
return <div>관리자님 환영합니다.</div>;
}
return <div>잘못된 접근입니다.</div>;
}
}
case 2) {}
내부에서 삼항 연산자를 사용
class Admin extends React.Component {
constructor(props) {
super(props);
this.state = {
level: "admin",
};
}
render() {
return <div>{this.state.level === "admin" ? "관리자님 환영합니다." : "잘못된 접근입니다."}</div>;
}
}
🟢 문자열 리터럴 정의
const element = <a href="https://velog.io/@cloudcoke">CloudCoke's Velog</a>
🟢 표현식 삽입
const element = <img src={user.profileImg} />
🟠 속성명은 카멜 케이스(Camel Case)로 작성해야 한다.
<button onClick={}>{this.state.isLogin ? "로그아웃" : "로그인"}</button>
onclick
, onblur
, onfocus
등과 같은 이벤트들을 JSX에서는 onClick
,onBlur
,onFocus
로 작성해야 한다.🟠 HTML 비표준 속성을 다룰 때 사용하는 data-*
속성은 기존 HTML 문법 그대로 작성해야 한다.
<ul>
<li data-index="{this.state.comment.index}">{this.state.comment.content}</li>
</ul>
🔴 JavaScript 예약어와 같은 속성명은 사용할 수 없다.
<form>
<label htmlFor="userid">아이디</label>
<input id="userid" className="uid" type="text" />
</form>
for
, class
와 같은 JavaScript 예약어는 htmlFor
, className
등으로 작성해야 한다.const element = <img src={user.profileImg} />
/>
를 이용해 바로 닫아 주어야 한다.🔴 여러개의 엘리먼트를 반환 시 반드시 하나의 엘리먼트로 감싸서 반환해야 한다.
class Test extends React.Component {
render() {
return (
<div>
<div>Hello</div>
<div>Bye</div>
<div/>
);
}
}
div
가 필요하지 않다면 Fragments를 사용할 수 있다.class Test extends React.Component {
render() {
return (
<React.Fragment>
<div>Hello</div>
<div>Bye</div>
<React.Fragment/>
);
}
}
class Test extends React.Component {
render() {
return (
<>
<div>Hello</div>
<div>Bye</div>
</>
);
}
}