JSX로 작성된 코드
function App(){
return (
<div>
Hello <b>react</b>
</div>
);
}
자바스크립트로 변환된 코드
function App(){
return React.createElement("div", null, "Hello ", React.createElement("b", null, "react"));
}
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById('root')
);
컴포넌트에 여러 요소가 있다면 반드시 부모 요소 하나로 감싸야 한다.
function App(){
return(
<h1> 이렇게 하면 </h1>
<h2> 오류남 </h2>
)
}
why? > Virtual DOM에서 컴포넌트 변화를 감지해 낼 때 효율적으로 비교할 수 있도록 컴포넌트 내부는 하나의 DOM 트리 구조로 이루어져야 한다는 규칙 존재
JSX 안에서 자바스크립트 표현식 작성하려면
{ }
로 감싸면 된다.
function App() {
const name = "react";
return (
<>
<h1>{name} 안녕</h1>
<h2> 잘 작동하니? </h2>
</>
);
}
JSX 내부의 자바스크립트 표현식에서는 If문 사용 불가
{name === "리액트" ? (<h1> 리액트입니다.</h1> ) : ( <h2>리액트가 아닙니다.</h2>)}
리액트에서 false를 렌더링할 때는 null과 마찬가지로 아무것도 나타나지 않음
return <div>{name === "리액트" && <h1>리액트입니다.</h1>}</div>;
주의할 점
falsy한 값인 0은 예외적으로 화면에 나타난다.
const number = 0;
return number && <div>내용</div>
함수에서 undefined만 반환하여 렌더링하는 상황을 만들면 안된다. (JSX내부에서 렌더링하는 것은 가능)
OR연산자(||)를 사용해 해당 값이 undefined일 때 사용할 값을 지정해서 오류를 방지한다.
리액트에서 DOM요소에 스타일을 적용할 때는 문자열 형태로 넣는 것이 아니라 객체 형태로 넣어 줘야 한다.
camelCase로 작성
<div className="react"> </div>
<input />
{/* JSX 내부에서 주석 장성 방법 */}