JSX 는 리액트에서 생김새를 정의할 때, 사용하는 문법입니다. 얼핏보면 HTML 같이 생겼지만 실제로는 JavaScript
React는 별도의 파일에 마크업과 로직을 넣어 기술을 인위적으로 분리하는 대신, 둘 다 포함하는 “컴포넌트”라고 부르는 느슨하게 연결된 유닛으로 관심사를 분리
작동방식
실제로는 JSX 은 Babel에 의해 React.createElement(...)
로 변환
그래서 브라우저에서 실행이 가능하게 됨
그렇기 때문에 import React from 'react'
부분이 코드에서 react를 사용하는 부분이 없더라도 들어가 있어야 함
프로퍼티 명명 규칙
사용시 주의사항
import React from "react"
선언이 꼭 필요하다.JSX 에서 태그에
style
과 CSS class 를 설정하는 방법은 HTML 에서 설정하는 방법과 다릅니다.
background-color
처럼 -
로 구분되어 있는 이름들은 backgroundColor
처럼 camelCase 형태로 네이밍 const style = {
backgroundColor: 'black',
color: 'aqua',
fontSize: 24, // 기본 단위 px
padding: '1rem' // 다른 단위 사용 시 문자열로 설정
}
class=
가 아닌 className=
으로 설정 <div className="gray-box"></div>
2+2
, user.firstName
, format(user)
const name = 'Josh Perez';
const element = <h1>Hello, {name}</h1>;
ReactDOM.render(
element,
document.getElementById('root')
);
{/* 이런 형태로 */}
작성// 이런 형태로도
주석 작성이 가능 return (
<>
{/* 주석은 화면에 보이지 않습니다 */}
/* 중괄호로 감싸지 않으면 화면에 보입니다 */
<Hello
// 열리는 태그 내부에서는 이렇게 주석을 작성 할 수 있습니다.
/>
</>
);
function formatName(user) {
return user.firstName + ' ' + user.lastName;
}
const user = {
firstName: 'Harper',
lastName: 'Perez'
};
// 괄호로 묶은 부분
const element = (
<h1>
Hello, {formatName(user)}!
</h1>
);
ReactDOM.render(
element,
document.getElementById('root')
);
if
구문 및 for loop
안에 사용하고,function getGreeting(user) {
if (user) {
return <h1>Hello, {formatName(user)}!</h1>;
}
return <h1>Hello, Stranger.</h1>;
}
JSX 에 사용자 입력을 상비하는 것은 안전
작동방식
React DOM은 JSX에 삽입된 모든 값을 랜더링하기 전에 이스케이프
& becomes &
< becomes <
> becomes >
" becomes "
' becomes '
// 사용자 입력을 받아 출력하는 것도 안전합니다.
const title = response.potentiallyMaliciousInput;
const element = <h1>{title}</h1>;
Fragment 가 나온 배경
역할
사용방법
<React.Fragment> ...내용 </React.Fragment>
<> ...내용 </>
엘리먼트 - React 앱의 가장 작은 단위
ReactDOM.render(element, container[, callback])
반환값 - 컴포넌트에 대한 참조(ref)
하는일
React 엘리먼트가 이전에 container
내부에 렌더링 되었다면 해당 엘리먼트는 업데이트하고
최신의 React 엘리먼트를 반영하는 데 필요한 DOM만 변경
주의점
hydrate()
를 사용하는 것이 더 좋음// 엘리먼트를 ReactDOM.render로 화면에 표시하기
const element = <h1>Hello, world</h1>;
ReactDOM.render(element, document.getElementById('root'));
// reactDOM 의 가장 상위 노드를 root DOM 노드라고 부름
React 엘리먼트는 불변객체(const) 이기 떄문에 엘리먼트를 생성한 이후에는 해당 엘리먼트의 자식이나 속성을 변경할 수 없음
하단 예시로 만들 내용)
function tick() {
const element = (
<div>
<h1>Hello, world!</h1>
<h2>It is {new Date().toLocaleTimeString()}.</h2>
</div>
);
ReactDOM.render(element, document.getElementById('root'));
}
setInterval(tick, 1000);