React
[React] JSX
wwxs
2024. 8. 29. 02:00
JSX
- JS(TS) 파일 내에서 HTML과 유사한 마크업을 작성할 수 있도록 해주는 JS 구문 확장 문법
사용 목적
- 선언적 뷰 설계 가능 (UI를 직관적으로 설계)
- 불필요한 DOM 설정 필요 X
특징
- JS + HTML (XML) 형태로 엄격한 문법 체계
- JSX 내에서 Babel을 사용해 JS로 변환하려면 XML 문법을 준수
JSX 문법 규칙
1) 단일 루트 노드
- 하나의 컴포넌트는 단일 루트 노드만 반환
- 최상단의 루트 태그가 존재해야 함
- 주로 <></> 빈 fragment로 감싸서 표현
2) 태그 닫기
- 태그는 반드시 닫혀야 하며 단일 태그 사용 시 닫히는 꺽쇠괄호에 /가 첨부 되있어야 한다
- ex) input, br, hr, img 등
3) 대소문자 구분
- 태그 내의 이름이 대소문자를 구분
- 소문자로 시작: HTML 요소로 인식
- 대문자로 시작: 사용자 정의 컴포넌트로 인식
4) HTML 코드를 JSX로 변환시 주의점
- 대부분 lowerCamelCase 사용
- css 속성, on- 메서드 등
- class 속성의 경우 className으로 변경
더보기
export default function JSX01() {
const welcomeMsg = "환영합니다.";
const greeting = (name: string) => `안녕하세요 ${name}님`;
const userInfo = {
name: "홍동현",
age: 50,
};
// 요소의 이벤트로 함수 전달
const handleClick = (value: string) => {
console.log(`${value}`);
};
// CSS 객체(값: 문자열 지정)
const divStyle = {
backgroundColor: 'orange',
color: 'white',
padding: '10px'
}
class Hello {
id: string;
constructor(id: string) {
this.id = id;
}
}
return (
<>
{/* html 요소 */}
<div>JSX01</div>
<p style={{ fontSize: "20px", color: "pink" }}>안녕하세요</p>
<input type="text" />
<img src="" alt="" />
<br />
<hr />
{/* 컴포넌트 */}
<Div />
<hr />
{/*
HTML 내에서 JS의 속성 지정
: 문자열, 숫자, 기타 JS 표현식 외의 객체도 모두 중괄호 내에서 작성
*/}
<div>{welcomeMsg}</div>
<div>{greeting("홍동현")}</div>
<div>
이름: {userInfo.name} / 나이: {userInfo.age} /{3 + 5 / 2}
</div>
{/*
요소에 이벤트 전달 시
, 코드를 해석하는 과정에서 실행되지 않도록
>> 콜백 함수의 형태로 전달 (익명 함수의 형태)
*/}
<button onClick={() => handleClick("클릭")}>클릭해주세요</button>
<div style={divStyle} id="divElement" className="">
DIV 요소
</div>
</>
);
}