import
자바스크립트의 확장 문법이며 XML과 매우 비슷하게 생김.
이런 형식으로 작성한 코드는 브라우저에서 실행되기 전에 코드가 번들링되는 과정에서 바벨을 사용하여 일반 자바스크립트 형태의 코드로 변환된다.
// JSX
function App() {
return (
<div>
Hello <b>react</b>
</div>
)
}
// after bundling
function App() {
return React.createElement("div", null, "Hello", React.createElement("b", null, "react"));
}
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);
ReactDOM.render
컴포넌트를 페이지에 렌더링하는 역할을 하며, react-dom 모듈을 불러와 사용할 수 있다. 이 함수의 첫 번째 파라미터에는 페이지에 렌더링할 내용을 JSX 형태로 작성하고, 두 번째 파라키터에는 해당 JSX를 렌더링 할 document 내부 요소를 설정한다. 기본적으로는 id가 root인 요소 안에 렌더링을 하도록 설정되어 있다.
React.StrictMode
리액트 프로젝트 내에서 리액트의 레거시 기능들을 사용하지 못하게 하는 기능이다. 이를 사용하면 문자열 ref, componentWillMount 등 나중에는 완전히 사라지게 될 옛날 기능을 사용했을 때 경고를 출력한다.
컴포넌트는 가장 바깥에서는 하나의 태그로 감싸져야 함
이유는 Virtual DOM에서 컴포넌트 변화를 감지해 낼 때 효율적으로 비교할 수 있도록 컴포넌트 내부는 하나의 DOM 트리 구조로 이루어져야 한다는 규칙이 있기 때문이다.
여기서 꼭 div
요소를 사용하고 싶지 않다면 v16 이상부터 도입된 <Fragment>
기능을 사용하면 된다.
<Fragment>
는 <>
와 같이 빈 태그로 사용할 수도 있다.
자바스크립트 표현은 {}
안에 넣어서 함
If문 대신 조건부 연산자(삼항연산자)
<div>
{name === '리액트' ? <h1>리액트입니다.</h1> : <h1>리액트가 아닙니다.</h1>}
</div>
// name이 '리액트'가 아닐 때에는 아무것도 나타나지 않는다.
// {name === '리액트' ? <h1>리액트입니다.</h1> : null} 과 같다.
function App() {
const name = '리액트아님';
return <div>{name === '리액트' && <h1>리액트입니다.</h1>}</div>
}
export default App;
다만, falsy한 값인 0은 예외적으로 화면에 나타나기에 주의해야 한다.
// 이 코드는 화면에 0이 보여진다.
const number = 0;
return number && <div>내용</div>;
// 다음과 같이 undefined인 값을 렌더링하면 오류가 난다.
function App() {
const name = undefined;
return name;
}
// 그러나 JSX 내부에서 undefined를 렌더링하는 건 괜찮다.
function App() {
const name = undefined;
return <div>{name}</div>;
}
// 하지만 위의 코드도 좋은 코드는 아니고 값이 undefined일 때 예외처리를 해 주는 것이 좋다.
function App() {
const name = undefined;
return name || '값이 undefined입니다.';
// 스타일 객체를 미리 선언하고 div의 style 값으로 지정
function App() {
const name = '리액트';
const style = {
backgroundColor: 'black',
color: 'aqua',
fontSize: '48px'
};
return <div style={style}>{name}</div>;
}
// 스타일을 바로 정의
function App() {
const name = '리액트';
return (
<div
style={{
backgroundColor: 'black',
color: 'aqua',
fontSize: '48px'
}}
>
</div>
);
}
<br></br> => <br />
<input></input> => <input />
// 한 줄 주석은 이렇게
{/* 여러줄의 주석은 이렇게 */}
ESLint는 문법 검사 도구이고 Prettier는 코드 스타일 자동 정리 도구이다.
>format
이라고 입력한 후 엔터를 누르면 스타일이 정리된다.
물론 설정(Preference)에 들어가서 format on Save로 저장을 누를 때마다 자동으로 포맷팅 되게 하는 것이 더욱 편리할 것이다.