JSX는 아래의 이미지와 같이 하나의 파일에 자바스크립트와 HTML을 동시에 작성해줍니다.

const element = <h1>Hello, world!</h1>;
위에 희한한 태그 문법은 문자열도, HTML도 아닙니다. JSX라 하며 JavaScript를 확장한 문법입니다.
그렇다면
- JSX(JavaScript XML)는 Javascript에 XML을 추가한 확장한 문법이다.
 - JSX는 리액트로 프로젝트를 개발할 때 사용되므로 공식적인 자바스크립트 문법은 아니다.
 - 브라우저에서 실행하기 전에 바벨을 사용하여 일반 자바스크립트 형태의 코드로 변환된다.
 - JSX는 하나의 파일에 자바스크립트와 HTML을 동시에 작성하여 편리하다.
 
- 부모 요소 하나가 크게 감싸는 형태여야 한다.
 
<div>,<Fragment>,<>
요런형태로 많이 감싼다고 한다.
- 한줄을 써줄 때는
 <div>를 생략할 수 있다.
JSX 안에서도 자바스크립트 표현식을 사용할 수 있다. 자바스크립트 표현식을 작성하려면 JSX내부에서 코드를 { }로 감싸주면 된다.
if 구문과 for 루프는 JavaScript 표현식이 아니기 때문에 JSX 내부 자바스크립트 표현식에서는 사용할 수 없다. 그렇기 때문에 조건부에 따라 다른 렌더링 시 JSX 주변 코드에서 if문을 사용하거나, {}안에서 삼항 연산자(조건부 연산자)를 사용 한다.
1) 외부에서 사용
2) 내부에서
3) and연산자 사용
class App extends Component { render() { let name = 'React'; return ( <div> { name === 'React' && <h1>This is React.</h1> } </div> ); } }
4) 즉시실행함수 사용
{}를 써야하기때문에, 스타일을 적용할 때에도 객체 형태로 작성해야한다.JSX에서 HTML엘리먼트를 작성할 때는 반드시 소문자를 사용해야 하지만, 컴포넌트를 작성할 때는 컴포넌트 클래스 이름과 동일하게 PascalCase로 작성되어야 한다.
ReactDOM.render(
	<div>
		<MyCustomComponent/>
	</div>,
	document.getElementById('root')
);
// 개발자가 작성한 코드
const element = (
  <h1 className="greeting">
    Hello, world!
  </h1>
);
// babel로트랜스 파일된 코드
const element = React.createElement(
  'h1',
  {className: 'greeting'},
  'Hello, world!'
);
React.createElement()는 버그가 없는 코드를 작성하는 데 도움이 되도록 몇 가지 검사를 수행 후, 기본적으로 다음과 같은 객체를 생성한다.const element = {
  type: 'h1',
  props: {
    className: 'greeting',
    children: 'Hello, world!'
  }
}