index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="libs/css/index.css" />
<title> Vanila JS like React </title>
</head>
<body>
<div class="root"></div>
<script src="<https://unpkg.com/axios/dist/axios.min.js>"></script>
<script type="module" src="../public/index.js"></script>
</body>
</html>
root
에 우리의 page가 들어 간다.head
에서 title
위에 두자.body
의 가장 하단에 두자.index.js
import { getStorage, setStorage } from "./libs/storage.js";
import load from "./router.js"
const url = getStorage('url');
load(url ? url : 'login');
JS의 기본 설정을 해준다. (추후에 알아보자)
ex) 통신설정
axios
: session ID를 매번 바꾸기에 설정해줘야 한다.SameSite
: 크롬의 쿠키 보안 정책(cross-site) 관련 설정해줘야 한다.html 파일을 열 때 sessionStorage
의 저장된 url 페이지로 연결한다.
router.js
import { $ } from "./libs/util.js";
const load = async (url) => {
window.sessionStorage.setStorage('url', url);
const root = $(".root");
root.innerHTML = ``;
switch(url){
case 'login':
root.appendChild(await Login());
break;
case 'home':
root.appendChild(await Home());
break;
default:
root.innerHTML = url;
}
}
export default load;
html의 root
를 초기화하고 우리의 페이지 객체를 추가시킨다.
새로운 페이지로 이동할 때 sessionStorage
에 url를 저장하여 화면 새로고침을 하여도 패이지가 유지 된다.
appendChild
쓰는 이유
eventListener를 적용시키기 위해선 객체가 추가되어야 한다. innerHTML만 추가하면 이벤트가 적용되지 않는다.
async / await
쓰는 이유
페이지 객체를 만드는 과정에서 데이터를 axios 통신으로 가져 올 수 있다. await 하여 데이터를 수신하고 페이지 객체를 root에 추가한다.
개선해야할 점.