Front/React
React - JSX 문법
Hyeon_
2021. 12. 17. 22:40
JSX
- 자바스크립트의 확장 문법
- XML과 유사함
- 브라우저에서 실행되기 전에 코드가 번들링되는 과정에서 바벨을 사용하여 일반 자바스크립트 형태로 변환됨
- 컴포넌트를 렌더링할 때마다 JSX가 아닌 React.createElement를 사용해야 하면 다음과 같은 상황 발생
{/* JSX 문법 */}
function App() {
return (
<div>
Hello <b>react</b>
</div>
);
}
- 자바스크립트로 변환
// javascript 문법
function App() {
return React.createElement("div", null, "Hello", React.createElement("b", null, "react"));
}
JSX의 장점
- 보기 쉽고 익숙함
- HTML 코드를 작성하는 것과 비슷하기 때문에 가독성이 높고 작성하기도 쉬움
- 높은 활용도
- div, span과 같은 HTML 태그를 사용할 수 있고, 컴포넌트도 JSX 안에서 작성 가능
- App 컴포넌트를 HTML 태그를 쓰는 것과 같이 작성 가능
JSX 문법
- React 문법
- 자바스크립트 표현 사용
- 감싸인 요소
- if문 대신 조건부 연산자 사용 (3항 연산자 사용
(조건 ? true : false)
) - AND 연산자(&&)를 사용한 조건부 렌더링
- undefined를 렌더링하지 않기
- 인라인 스타일링 : 카멜 표기법
- class대신 className 사용
- 꼭 닫아야 하는 태그
- 주석
자바스크립트 표현 사용
- JSX 안에서는 자바스크립트 표현식 사용 가능
- JSX 내부에서 코드를
{ }
로 감싸면 렌더링 가능
import React from 'react';
function App() {
const name = "리액트";
return (
<div>
<h1>{name} 안녕</h1>
<h2>작동 확인중</h2>
</div>
);
}
export default App;
감싸인 요소
- 컴포넌트에 여러 요소가 있으면 반드시 부모 요소 하나로 감싸야 함
<div>
기능을 사용하고 싶지 않다면<Fragment>
기능을 사용해서 호출 -> Fragment라는 컴포넌트를 추가해서 불러야 함
import React fron 'react';
function App() {
return (
<div> {/* 꼭 감싸주어야 함 */}
<h1>Hello React</h1>
</div>
);
}
export default App;
import React, {Fragment} fron 'react';
function App() {
return (
<Fragment> {/* 꼭 감싸주어야 함 */}
<h1>Hello React</h1>
</Fragment>
);
}
export default App;
if문 대신 조건부 연산자 (3항 연산자 (조건 ? true : false)
)
- JSX 내부의 자바스크립트 표현식에서 if문의 사용은 불가능
- 조건에 따라 다른 내용을 렌더링 해야 할 때는 JSX 밖에서 if문을 사용하여 사용 가능
import React fron 'react';
function App() {
const name = "홍길동";
return (
<div>
{/* 조건(삼항) 연산자 */}
{name === '홍길동' ? (
// 조건 True일 때
<h3>홍길동 입니다</h3>
) : (
// 조건 False일 때
<h3>홍길동이 아닙니다.</h3>
)}
{name === '이몽룡' ? <h3>이몽룡입니다</h3> : <h3>이몽룡이 아닙니다.</h3>}
</div>
);
}
export default App;
다음과 같이 작성하면 브라우저에서 '홍길동입니다.', '이몽룡이 아닙니다.' 라는 문구를 볼 수 있음
AND 연산자(&&)를 사용한 조건부 렌더링
특정 조건을 만족할 때 내용을 보여주고, 만족하지 않을 때 아예 아무것도 렌더링 하지 않아야 하는 상황 발생
조건부 연산자 사용
조건 && expression
조건이 true이면 expression 반환
조건이 false이면 expression 반환하지 않고 무시
{name === '홍길동' && <h3>홍길동입니다.</h3>}
조건 || expression
조건이 0 또는 false이면 expression 반환
0이 아니면 해당 값 출력
const number = 100;
{number || '값이 undefined 입니다.'}
[output] 100
undefined를 렌더링 하지 않기
- React 컴포넌트에서는 함수에서 undefined만 반환하여 렌더링하는 상황을 만들면 안됨
- JSX 내무에서 undefined를 렌더링 하는 것은 가능하지만, React 컴포넌트 내서는 불가능
import React fron 'react';
import './App.css';
function App() {
const name = undefined;
return name;
}
export default App;
[output]
App(...): Nothing was returned from render, This usually means a return statement is missing. Or, to render nothin, return null.
인라인 스타일링 : 카멜 표기법
- CSS 속성명에
-
사용할 수 없고, 카멜 표기법(CamelCase) 사용 - background-color > backgroundColor
class 대신 className
- 일반 HTML에서 CSS 클래스 사용할 때는
<div class="myclass"></div>
로 표현 - JSX에서는
<div className="myclass"></div>
사용
태그는 반드시 닫아야 함
- HTML 코드 작성 시에는 태그를 닫지 않은 상태로 작성하기도 함
- JSX에서는 태그를 닫지 않으면 오류 발생
<br />
,<p />
와 같이 태그를 반드시 닫아야 함
주석
{/* ... */}
의 형태로 주석 작성
import React from 'react';
function App() {
return (
<div>
{/* 주석 사용 */}
// 주석 아님
/* */ 주석 아님
</div>
);
}
}
export default JSX;