react와 같이 렌더링을 전체적으로 담당하는 프론트엔드 라이브러리는 개발 환경이 중요하다.
<head>
태그 내에 추가한다.<!DOCTYPE html>
<html>
<head>
<title>react html 설치 예제</title>
<script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
</head>
<body>
</body>
</html>
<body>
태그 내에 작성해준다.<body>
<div id="root"></div>
</body>
// 컨테이너로 지정하기 위해 다른 태그와 식별이 필요하므로 id="root" 라는 값을 추가한다.
<script>
function MyButton(props) {
const [isClicked, setIsClicked] = React.useState(false);
const element = React.createElement(
'h1',
{ onClick: () => setIsClicked(true) },
isClicked ? 'CLicked!' : 'Clicked here...'
);
return element;
}
</script>
React.useState()
는 상태를 관리해주는 함수이다.
React.createElement()
는 react 컴포넌트를 만들어주는 함수이다.
컴포넌트 render
위와 같이 작성된 컴포넌트는 render 동작 없이 아무것도 수행되지 않는다. 작성된 컴포넌트를 render시켜주기 위해선 다음과 같은 작업이 필요하다.
const root = document.getElementById('root');
const rootElement = ReactDOM.createRoot(root);
const MyComponent = React.createElement(MyButton);
rootElement.render(MyComponent);
<div id='root'>
를 가져오는 방법이다. 이 element 내에 모든 react 컴포넌트들이 render된다.ReactDOM.createRoot(root);
본격적으로 react의 기능을 사용하는 구간이다. root 엘리먼트를 기반으로 react의 루트(뿌리)를 생성한다.
React.createElement(MyButton);
MyButton function을 react의 컴포넌트로 바꿔주는 역할을 한다.
rootElement.render(MyComponent);
구현된 component를 rootElement에 렌더링해준다.
위에서 사용된 React와 ReactDOM은 무엇이며 어떤 역할을 할까?
이 모든 과정을 자동으로 해주고, react 애플리케이션을 효율적으로 디버깅까지 해줄 수 있는 패키지가 있다. 바로 CRA (Create React APP) 이다. 다음 포스트에서 이를 다뤄보겠다.