JSX
const elemnt = <h1>Hello, world!</h1>
위의 태그 문법은 문자열도, HTML도 아닙니다.
JSX
라 하여 JavaScript
를 확장한 문법입니다.JSX
는 JavaScript
의 모든 기능이 포함되어 있습니다.
JSX란?
React
에서는 렌더링 로직이 UI로직과 연결된다는 사실을 받아들입니다.React
는 별도의 파일에 마크업과 로직을 넣어 기술을 인위적으로 분리하는 대신,
둘 다 포함하는 "컴포넌트"라고 부르는 느슨하게 연결된 유닛으로 관심사를 분리합니다.
- UI로직
- 이벤트가 처리되는 방식,시간에 따라 state가 변하는 방식, 화면에 표시하기 위해 데이터가 준비되는 방식 등
JSX에 표현식 포함하기
아래 예시에서는 name
이라는 변수를 선언 후 중괄호로 감싸 JSX
안에 사용하였습니다.
const name = 'Jong Hyuk';
const element = <h1>Hello, {name}</h1>
JSX
의 중괄호 안에는 유효한 모든 JavaScript표현식
을 넣을 수 있습니다.
아래 예시에서는 JavaScript
함수호출의 결과인 formatName(user)
을 <h1>
엘리먼트에 포함했습니다.
const formatName = ({firstName, lastName}) => {
return firstName + ' ' + lastName;
}
const user = {
firstName: 'Woo',
lastName: 'JongHyuk'
};
const element = (
<h1>
Hello, {formatName(user)}!
</h1>
)
JSX도 표현식입니다.
컴파일이 끝나면, JSX
표현식이 정규 JavaScript
함수 호출이 되고 JavaScript
객체로 인식됩니다.
즉, JSX를 if
구문 및 for
loop 안에 사용하고, 변수에 할당하고, 인자로서 받아들이고
함수로부터 반환할 수 있습니다.
const getGreeting = (user) => {
if(user) {
return <h1>Hello, {formatName(user)!}</h1>;
}
return <h1>Hello, Stranger.</h1>;
}
JSX 속성 정의
어트리뷰트에 따옴표를 이용해 문자열 리터럴을 정의할 수 있습니다.
const element = <a href="url"> link </a>;
중괄호를 사용하여 어트리뷰트에 JavaScript
표현식을 삽입할 수도 있습니다.
const element = <img src={user.avatarUrl}/>
JSX로 자식 정의
JSX
태그는 자식을 포함할 수 있습니다.
const element = (
<div>
<h1>안녕하세요</h1>
<h2>우종혁입니다.</h2>
</div>
)
JSX는 주입 공격을 방지합니다.
JSX
에 사용자 입력을 삽입하는 것은 안전합니다.
const title = response.name;
const element = <h1>{title}</h1>
ReactDOM
은 JSX
에 삽입된 모든 값을 렌더링하기 전에
이스케이프 하므로, 어플리케이션에서 명시적으로 작성되지 않은 내용은 주입되지 않습니다.
모든 항목은 렌더링 되기 전에 문자열로 변환됩니다.
이런 특성으로 인해 XSS 공격을 방지할 수 있습니다.
참고한 문서
'React' 카테고리의 다른 글
리액트 17버전 이상부터 React를 import 하지 않아도 되는 이유 (0) | 2022.10.01 |
---|---|
React] 리액트 Hook (0) | 2021.08.18 |
Redux] 리덕스 툴킷에 대해 (0) | 2021.08.17 |
TIL] 리액트 기초복습 (0) | 2021.07.06 |
TIL] props와 state (0) | 2021.07.04 |