#1. JSX
1. JSX의 개념
1) JSX란?
- JavaScript eXtension의 약자로 리액트에서 사용 가능한 자바스크립트 확장 문법이다.
- 리액트에서는 HTML을 표현할 때 JSX를 사용하여 표현한다.
- 겉으로 보기엔 HTML과 다를게 없어 보이지만, 빌드 시 Babel에 의해 자바스크립트로 변환된다.
- 자바스크립트 코드를 HTML 처럼 표현할 수 있다는게 장점이다.
- JSX는 공식적인 문법이라고 할 수는 없다.
2) JSX 사용 시 주의사항
- HTML 요소에 class 값을 정의할 때는 class="" 를 사용하지 않고 className="" 을 사용한다.
- class 단어는 ES6의 클래스 문법과 겹치는 예약어이기 때문이다.
- 요소에서 이벤트를 핸들링하는 onclick 같은 단어는 onClick 처럼 카멜표기법을 사용해야 한다.
- 주석은 <!-- 주석 --> 이 아닌, {/* 주석 */} 을 사용한다.
- HTML Custom-Element는 <my-element>와 같이 표기했지만, React에서는 <MyElement /> 와 같이 Pascal Case로 표기한다.
- JSX 내부에서 JS를 사용할 때는 { }를 사용한다. {console.log("example")}
- HTML에서는 닫는 태그 </>를 안붙여도 오류가 안나지만, JSX에서는 오류가 발생한다.
- 반드시 닫는태그를 명시해야한다. (ex <hr> → <hr />)
2. JSX 사용하기
1) 요소 사용하기
const Example = () => {
return (
<div>
<h1>example1</h1>
<h2>example2</h2>
</div>
);
};
- 컴포넌트에 여러 요소가 있다면(2개 이상) 반드시 부모 요소로 감싸는 형태여야 한다. (보통 <div />로 감싼다)
- 리액트의 Virtual DOM은 컴포넌트 변화를 감지할 때 효율적으로 비교하고자 컴포넌트 내부는 하나의 DOM 트리 구조로 이루어져야 한다는 규칙이 있다.
※ 어떤 태그라도 Self-closing tag가 가능하다.
<input> → <input />
<div></div> → <div />
<br> → <br />
2) 속성 사용하기
- 속성은 항상 쌍따옴표로 감싸야한다.
- 속성명을 몇몇개 다르게 지정해야하는 것 빼고는 크게 다를게 없다
const Example = () => {
return (
<div>
<h1 className="ex1">example1</h1>
<h2>example2</h2>
</div>
);
};
3) 변수 사용하기
- JSX에서 JS를 사용할 때는 { }를 감싸서 사용한다. (변수, 함수 등 호출할 때)
- { } 안에서는 간단한 사칙연산이 가능하다.
- HTML 속성에 변수를 출력할 경우 따옴표를 사용하면 안된다.
const Example = () => {
// === 사용자 정의 함수 === //
const name = "React";
const num = 1;
const color = "#f00";
return (
<div>
{/* 기본 변수 출력하기 - 간단한 사칙연산 가능 */}
<h3>
{name} 공부중! <br />
{num} + 1 = {num+1}
</h3>
<p>
{/* 속성값은 쌍따옴표로 감싼다. */}
이 색은 <font color="#00f">파랑색</font>입니다.<br />
{/* HTML 속성에 변수를 출력할 경우 따옴표를 사용할 수 없다. */}
이 색은 <font color={color}>빨간색</font>입니다.
</p>
</div>
);
};
4) 함수 사용하기
- { } 에 감싸서 함수를 호출한다. (함수 사용방법은 JS와 동일)
const Example =() => {
// === 사용자 정의 함수 === //
const myEllipsis = (num) => {
const myNumber = 5;
// myNumber가 매개변수 값보다 작을 경우 myNumber 리턴, 그렇지 않으면 매개변수 값 리턴
if(myNumber < num) {
return myNumber;
} else {
return num;
}
};
return (
<div>
{/* 사용자 정의 함수 호출하기 */}
<p>{myEllipsis(10)}</p>
</div>
);
};
5) 조건분기
- AND(&&) 연산자
- 조건 && 조건이 참인 경우 출력할 내용 형식으로 사용
- AND 연산자는 모든 조건이 참이 되어야 참이기 때문에 하나라도 거짓인 경우 출력하지 않는다.
const Example = () => {
const isLogin = true;
return (
<div>
{isLogin === true && <p>로그인 되셨습니다.</p>}
{isLogin === false && <p>로그인 해주세요.</p>}
</div>
);
};
// 로그인 되셨습니다. 출력
- OR(||) 연산자
- 조건 || 조건이 거짓인 경우 출력할 내용 형식으로 사용
- 조건이 참인 경우 표시되는 내용이 없다.
- 즉, 조건이 거짓일 경우에 내용을 출력하고자 할 때 사용한다.
const Example = () => {
// 출력할 내용이 없는 경우
// -> undefined, null, 0, false, ""(빈문자열) 중 하나를 return 할 경우 정상적인 화면 렌더링이 이루어 지지 않음
// 특히 undefined 변수를 바로 리턴하는 경우 에러 발생
const articleList = undefined;
return (
<div>
{/* 처음부터 거짓이지만, or 연산자는 하나만 참이여도 참이기 때문에 출력한다. 그래서 조건이 거짓인 경우 사용 */}
{articleList || <p>조회된 게시글이 없습니다.</p>}
</div>
);
};
// 조회된 게시글이 없습니다. 출력
- 삼항 연산자
- {조건 ? (조건이 참인 경우 출력할 내용) : (조건이 거짓인 경우 출력할 내용)} 형식으로 사용한다.
- 조건이 거짓인 경우를 사용하지 않고자 한다면 null 을 사용한다. ({조건 ? 참 : null})
const Example = () => {
const isLogin = true;
return (
<div>
{
isLogin === true ?
<button type="button">로그아웃</button> :
<button type="button">로그인</button>
}
</div>
)
};
// 로그아웃 버튼 출력
6) 반복문 사용하기
- 반복적으로 처리되는 컴포넌트 요소는 각 항목을 식별하기 위해 고유한 값을 갖는 key 속성을 포함해야한다. (React 권고사항)
const Example = () => {
// 목록정의 태그를 구성하기 위한 사용자 정의 함수
const createListItem = (count) => {
// <li>...<li> 단위를 저장할 배열
let li =[];
// 주어진 count 수 만틈 저장할 배열
for(let i = 0; i < count; i++) {
// 반복적으로 처리되는 컴포넌트 요소는 각 항목을 식별하기 위해 고유한 값을 갖는 key 속성을 포함해야한다. (React 권고 사항)
li.push(<li key={i}>item-{i}</li>);
}
return li;
};
return (
<div>
{/* 함수 호출 */}
<ul>{createListItem(5)}</ul>
</div>
);
};
'국비수업 > React' 카테고리의 다른 글
[React] CSS 사용하기 (0) | 2022.04.26 |
---|---|
[React] Props (Properties) (0) | 2022.04.25 |
[React] SPA (Single Page Application) (0) | 2022.04.22 |
[React] React의 기본 구조 (0) | 2022.04.21 |
[React] React의 개념 / 개발환경 구성하기 (0) | 2022.04.21 |