하나의 파일에 javascript와 html(xml)을 동시에 작성하여 js 코드 안에서 UI 관련 작업이 가능하기 때문에 시각적으로 도움이 된다.
또한, JSX를 사용하면 React가 더욱 도움이 되는 에러 및 경고메시지를 표시할 수 있게 해준다.
const name = 'John Doe';
const element = <h1>Hello, {name}!</h1>;
const x = 10;
const y = 20;
const element = <p>The sum of {x} and {y} is {x + y}.</p>;
const myStyle = {
color: 'blue',
backgroundColor: 'lightgray',
fontSize: '20px'
};
const element = <p style={myStyle}>Styled paragraph</p>;
Virtual DOM에서 컴포넌트 변화를 감지할 때 때 효율적으로 비교할 수 있도록 컴포넌트 내부는 하나의 DOM 트리 구조로 이루어져야 한다는 규칙이 있기 때문이다.
import React from 'react';
const MyComponent = () => {
return (
<div>
<div style={{ backgroundColor: 'red' }}>First div</div>
<div style={{ backgroundColor: 'blue' }}>Second div</div>
</div>
);
};
export default MyComponent;
import React from 'react';
const MyComponent = () => {
return (
<>
<div style={{ backgroundColor: 'red' }}>First div</div>
<div style={{ backgroundColor: 'blue' }}>Second div</div>
</>
);
};
export default MyComponent;
import React from 'react';
const MyComponent = () => {
return (
<Fragment>
<div style={{ backgroundColor: 'red' }}>First div</div>
<div style={{ backgroundColor: 'blue' }}>Second div</div>
</Fragment>
);
};
export default MyComponent;
부모요소가 없을 경우 아래와 같은 오류 발생!
// Fail to compile
// parsing error : adjacent JSX elements be wrapped in an enclosing tag
// Did you want a JSX fragment <>...</>?
if 구문과 for 루프는 JavaScript 표현식이 아니기 때문에 JSX 내부 자바스크립트 표현식에서는 사용할 수 없다.
때문에 조건부에 따라 다른 렌더링 시 JSX 주변 코드에서 if문을 사용하거나, {}안에서 삼항 연산자(조건부 연산자)를 사용한다.
const MyComponent = ({ isLoggedIn }) => {
return (
<div>
{isLoggedIn ? (
<p>Welcome, user!</p>
) : (
<p>Please log in to continue.</p>
)}
</div>
);
};
JSX에서 자바스크립트 문법을 쓰려면 {}를 써야 하기 때문에, 스타일을 적용할 때에도 객체 형태로 넣어 주어야 한다.
SX에서는 class가 아닌 className 을 사용한다.
const MyComponent = () => {
return (
<div className="container">
<label htmlFor="inputField">Name:</label>
<input type="text" id="inputField" />
</div>
);
};
import React from 'react';
const MyComponent = () => {
const containerStyle = {
backgroundColor: 'lightblue',
padding: '20px',
border: '1px solid blue'
};
const textStyle = {
color: 'white',
fontSize: '16px'
};
return (
<div style={containerStyle}>
<p style={textStyle}>Styled paragraph</p>
</div>
);
};
export default MyComponent;
{/…/} 와 같은 형식을 사용
const element = (
<div>
{/* 이것은 한 줄 주석입니다 */}
<h1>Hello, world!</h1>
</div>
);
// 의 형식을 사용
const element = (
<div>
{/*
여러 줄 주석입니다.
이 부분은 렌더링되지 않습니다.
*/}
<h1>Hello, world!</h1>
</div>
);