- JSX는 함수 호출과 객체 생성을 위한 문법적 편의를 제공하는 JavaScript의 확장
- JSX는 Babel에 의해서 Transcompile 됩니다.
- HTML 태그 내에 JavaScript 연산
- class -> className
- 스타일은 object로
- 닫는 태그 필수
- 최상단 element는 반드시 하나
1️⃣ 규칙
1. HTML과 달리 모든 태그는 꼭 닫혀있어야 합니다.
2. 두 개 이상의 엘리먼트는 무조건 하나의 엘리먼트로 감싸져 있어야 합니다.
import React, { Component } from 'react';
class App extends Component {
render() {
return (
<div>Hello</div>
<div>World</div>
);
}
}
export default App;
예를 들어 위의 코드는 엘리먼트가 두 개 이상이기 때문에 오류가 납니다.
import React, { Component } from 'react';
class App extends Component {
render() {
return (
<div>
<div>Hello</div>
<div>World</div>
</div>
);
}
}
export default App;
그러므로 이렇게 두 개 이상의 엘리먼트는 무조건 하나의 엘리먼트로 감싸주어야 합니다.
간단하지만 의아하고 귀찮을 수 있으므로 v16.2 부터는 Fragment를 도입하였습니다.
<Fragment> 를 사용해볼까요?
import React, { Component, Fragment } from 'react';
class App extends Component {
render() {
return (
<Fragment>
<div>Hello</div>
<div>World</div>
</Fragment>
);
}
}
export default App;
이렇게 써주면 오류도 안나고, 콘솔창에 불필요한 div도 나타나지 않습니다.
또한, Fragment는 간단히 <>로 표기가 가능합니다.
import React, { Component, Fragment } from 'react';
class App extends Component {
render() {
return (
<>
<div>Hello</div>
<div>World</div>
</>
);
}
}
export default App;
2️⃣ JSX 안에 자바스크립트 값 사용하기
import React, { Component, Fragment } from 'react';
class App extends Component {
render() {
return (
<div>
hello {name}
</div>
);
}
}
export default App;
리턴문 안에 {name} 을 작성해준 후
import React, { Component, Fragment } from 'react';
class App extends Component {
render() {
const name = 'react'; // 추가
return (
<div>
hello {name}
</div>
);
}
}
export default App;
const name = 'react'; 를 추가해줘서 name값을 알려주면 됩니다.
⭐ var / const / let
var : ES6에서는 더 이상 쓰이지 않음
const : 한번 선언 후 고정적인 값
let : 유동적인 값
3️⃣ 조건부 렌더링
JSX 내부에서 조건부 렌더링을 할 때는 보통 삼항 연산자를 사용하거나 AND 연산자를 사용합니다.
반면, IF문은 사용할 수 없습니다.
삼항 연산자 예시를 보겠습니다.
import React, { Component, Fragment } from 'react';
class App extends Component {
render() {
const name = 'react';
return (
<div>
{
1 + 1 === 3
? '맞다'
: '틀리다'
}
</div>
);
}
}
export default App;
AND 연산자 예시를 보겠습니다.
import React, { Component, Fragment } from 'react';
class App extends Component {
render() {
const name = 'react';
return (
<div>
{
name === 'react' && <div>리액트</div>
}
</div>
);
}
}
export default App;
name값이 react일 경우 리액트를 렌더링 해주고
react가 아니라면 아무것도 뜨지 않게 됩니다.
조건이 여러 개인 경우엔 보통 JSX 바깥에서 하는 게 일반적이긴 하지만, JSX 내부에서 함수를 선언하고 바로 실행하는 방식으로 구현 가능합니다.
예시를 보겠습니다.
import React, { Component, Fragment } from 'react';
class App extends Component {
render() {
const value = 1;
return (
<div>
{ {/* 함수 선언 */}
function() {
if (value === 1) return <div>1이다!</div>
if (value === 2) return <div>2다!</div>
if (value === 3) return <div>3이다!</div>
return <div>없다</div>
}
}
</div>
);
}
}
export default App;
이렇게 먼저 함수 선언을 해주고 난 후
import React, { Component, Fragment } from 'react';
class App extends Component {
render() {
const value = 1;
return (
<div>
{ {/* 함수 선언 */}
(function() {
if (value === 1) return <div>1이다!</div>
if (value === 2) return <div>2다!</div>
if (value === 3) return <div>3이다!</div>
return <div>없다</div>
}) () {/* 바로 호출 */}
}
</div>
);
}
}
export default App;
소괄호로 함수를 감싼 후, 바로 ()를 통해 호출하면 됩니다.
이것을 간단하게 화살표 함수로 다시 표현해볼까요?
import React, { Component, Fragment } from 'react';
class App extends Component {
render() {
const value = 1;
return (
<div>
{ {/* 화살표 함수로 함수 선언 */}
( () => {
if (value === 1) return <div>1이다!</div>
if (value === 2) return <div>2다!</div>
if (value === 3) return <div>3이다!</div>
return <div>없다</div>
}) () {/* 바로 호출 */}
}
</div>
);
}
}
export default App;
4️⃣ CSS 적용
1. 스타일을 객체 { } 안에 작성한다.
2. 카멜표기법으로 작성한다.
https://www.w3schools.com/react/react_css.asp
ex) font-size => fontSize, padding-left => paddingLeft
3. 적용할 때에도 {style} 이라고 적는다.
4. css클래스를 따로 사용할 경우 class가 아닌 className을 사용한다.
import React, { Component } from 'react';
class App extends Component {
render() {
const style = {
backgroundColor: 'black',
padding: '15px',
color: 'white',
fontSize: 20px
};
return (
<div style = {style}>
안녕하세요!
</div>
);
}
}
export default App;
5️⃣ 주석
{ /* 주석 처리하기 */ } 으로 감싸주어야 합니다.
import React, { Component } from 'react';
class App extends Component {
render() {
return (
<div>
{/* 안녕하세요! 주석처리하기 */}
</div>
);
}
}
export default App;
'Project 댕린이집' 카테고리의 다른 글
React 연습 (0) | 2024.01.06 |
---|---|
React의 state를 알아보자 (0) | 2024.01.05 |
React의 Props를 알아보자 (0) | 2024.01.02 |
React의 Component를 알아보자 (0) | 2024.01.01 |
React의 폴더 구조 (0) | 2023.12.31 |