리액트 앱에는 어떻게 접속하는 걸까? 😺
리액트 앱의 동작 원리 상세 보기
import logo from './logo.svg';
import './App.css';
function App() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p>
Edit <code>src/App.js</code> and save to reload.
</p>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
>
Learn React
</a>
</header>
</div>
);
}
export default App;
import logo from './logo.svg';
import './App.css';
function App() {
return (
<div className="App">
안녕하세요
</div>
);
}
export default App;
사용자가 리액트 앱에 대한 서비스를 요청하려면, 리액트 앱 서버는 우선 웹 페이지 파일인 public 폴더의 index.html을 보냅니다.
개발자 도구 [Element] 탭에서 태그에 작성된 script 태그를 확인합니다.
다음과 같이 bundle.js 파일을 불러와 실행합니다.
<script defer src="/static/js/bundle.js"></script>
bundle.js는 src 폴더에 있는 index.js와 이 파일이 불러온 모듈을 하나로 묶어 놓은 파일입니다.
따라서 index.js에 어떤 내용이 있는지 파악해야 리액트 앱의 동작을 제대로 이해할 수 있습니다.
index.js 코드 이해하기
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);
// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();
import App frm './App';index.js에서는 import 문으로 App.js에 있는 App 컴포넌트를 포함해 여러 개의 모듈을 불러옵니다.
const root = ReactDOM.createRoot(document.getElementById('root'));에서 ReactDOM.createRoot는 인수로 전달한 요소를 리액트 앱의 루트로 만들어 반환하는 메서드이며 인수로 document.getElementById('root')를 전달하는데, 돔에서 id가 'root'인 요소를 찾아 반환합니다.
변수 root에는 현재 리액트의 루트가 저장되어 있고, render 메서드가 수행되면 정달된 리액트 컴포넌트가 돔에 추가되어 페이지에 나타나기 때문에 결론적으로 App 컴포넌트를 돔 루트에 추가하게 되어 페이지에 App 컴포넌트에서 정의한 HTML 요소가 표시됩니다.
요약 👌
💡