React 기초 JSX 문법
JSX
쉽게 말해 HTML 문법을 JavaScript 코드 내부에 쓴 것. 그것이 바로 JSX입니다. “React에서 HTML을 표현할 때, JSX를 사용한다. 외관상 HTML같은 마크업 언어를 리터럴로 입력하는 것으로 보이는데, 빌드 시 Babel에 의해 자바스크립트로 변환된다. 자바스크립트 코드를 HTML처럼 표현할 수 있기 때문에 용이한 개발이 가능하다.” (나무위키曰)
JSX는 자바스크립트 안에서 HTML 문법을 사용해서 view를 구성할 수 있게 도와주는 자바스크립트 문법으로, 리액트 개발에 엄청난 도움을 주고 있습니다.
문법
1. 태그는 최상위 태그로 감싸줘야 합니다. 꼭 하나의 요소로 묶어야 합니다.
- 에러의 예제
<h1>
태그가 2개인데 묶지 않고 사용했습니다. 이런 경우는 에러가 발생합니다
import React, { Component } from 'react';
class App extends Component {
render() {
return (
<h1>안녕하세요?</h1>
<h1>안녕하세요?</h1>
);
}
}
export default App;
<div>
태그로 감싸는 방법입니다.
import React, { Component } from "react";
class App extends Component {
render() {
return (
<div>
<h1>안녕하세요?</h1>
</div>
);
}
}
export default App;
<Fragment>
태그로 감싸는 방법입니다.- ``
`태그는 <div>태그보다 무거워서 권장하지 않습니다.
- ``
import React, { Component, Fragment } from "react";
class App extends Component {
render() {
return (
<Fragment>
<h1>안녕하세요?</h1>
</Fragment>
);
}
}
export default App;
- <> </>를 사용하는 방법입니다.
- 이와 같은 방법을 사용하면 스타일링에도 문제가 없고, Fragment를 불러오지 않으니 무겁지도 않습니다
import React, { Component } from "react";
class App extends Component {
render() {
return (
<>
<h1>안녕하세요?</h1>
</>
);
}
}
export default App;
2. JSX 안에서 자바스크립트를 사용하고 싶을때는 {}를 사용합니다.
JSX는 return안에 작성하기 때문에 그 밖에는 자바스크립트 언어를 작성해도 됩니다. return안에는 JSX문법을 작성하기 때문에 이때부터 자바스크립트 언어를 사용하려면 { }를 작성해야합니다. { }의 마지막에는 [;]을 작성하면 오류가 있으니 주의해주세요.
import React, { Component } from "react";
class App extends Component {
render() {
const text = "안녕하세요";
return (
<>
{alert("자바스크립트에요~")}
<h1>{text}</h1>
</>
);
}
}
export default App;
3. JSX의 {}안의 주석은 /* */만 사용 가능합니다.
- return문 밖에서는 // 주석처리가 가능합니다.
import React, { Component } from "react";
class App extends Component {
render() {
/* 두줄 주석 서용 */
const text = "안녕하세요"; //한줄 주석 사용
return (
<>
<h1>{text}</h1>
</>
);
}
}
export default App;
- return문 안에서는 /* */만 사용이 가능합니다.
import React, { Component } from "react";
class App extends Component {
render() {
const text = "안녕하세요";
return (
<>
<h1>{text /* 변수사용 */}</h1>
</>
);
}
}
export default App;
4. 조건부 렌더링
JSX 내부의 자바스크립트 표현식에서 if 문을 사용할 수는 없습니다. 그렇기 때문에 JSX 밖에서 if 문을 사용해서 값을 설정하거나 {}안에서는 조건부 연산자 - 삼항연산자를 사용해야합니다.
import React from "react";
function App() {
const name = "리액트";
return (
<>
<div>
{name === "리액트" ? (
<h1>리액트입니다.</h1>
) : (
<h1>리액트가 아닙니다</h1>
)}
</div>
</>
);
}
export default App;
- 삼항연산자의 중첩도 사용 가능합니다
function Component() {
return (
<div>
{1 === 1 ? (
<p>참이면 보여줄 HTML</p>
) : 2 === 2 ? (
<p>안녕</p>
) : (
<p>반갑</p>
)}
</div>
);
}
- 논리연산자 &&, ||도 이용 가능합니다.
이 코드는 잘 동작하는데, 자바스크립트에서 true && expression 은 항상 expression 으로 평가되고, false && expression 은 항상 false 로 평가되기 때문입니다.
따라서 조건이 true 라면 && 다음에 오는 요소가 노출됩니다. 만약 조건이 false 라면, React는 이를 무시하고 건너뜁니다.
function Mailbox(props) {
const unreadMessages = props.unreadMessages;
return (
<div>
<h1>Hello!</h1>
{unreadMessages.length > 0 && (
<h2>You have {unreadMessages.length} unread messages.</h2>
)}
</div>
);
}
const messages = ["React", "Re: React", "Re:Re: React"];
ReactDOM.render(
<Mailbox unreadMessages={messages} />,
document.getElementById("root")
);
5. JSX 스타일링
JSX에서 자바스크리브 문법을 사용 하려면 {}를 사용해야합니다. 그리고 스타일 속성명과 값을 작성하려면 객체방식이어야 하기때문에 두번의 중괄호가 필요합니다.
<태그명 style=></태그명>
import React, { Component } from "react";
class App extends Component {
render() {
return (
<>
<h1
style=
>
스타일링
</h1>
</>
);
}
}
export default App;
- 변수에 값을 넣어 사용도 가능합니다.
import React, { Component } from "react";
class App extends Component {
render() {
const h1Style = {
backgroundColor: "black",
color: "pink",
};
return (
<>
<h1 style={h1Style}>스타일링</h1>
</>
);
}
}
export default App;
6. 외부 스타일시트의 class 가져와서 사용 가능합니다.
자바스크립트에서 class란 예약어가 사용되고 있기 때문입니다. 그래서 className을 이용해서 css를 적용합니다.
<태그명 className="클래스명"></태그명>
* test.css 라는 파일을 만듭니다. .black-nav {
background: black;
width: 100%;
display: flex;
color: white;
padding: 20px;
font-weight: 600;
font-size: 20px;
}
* 위의 css를 불러오는 방법입니다.
import React, { Component } from 'react';
import './test.css';
class App extends Component {
render() {
return (
<>
<h1 className="black-nav">스타일링</h1>
</>
);
}
}
export default App;
위의 css 예제에서 css를 작성한후 밑의 예제와같이 className을 이용해 class를 불러왔습니다.
댓글남기기