클론코딩/노마드코더 크롬 앱
[클론코딩/크롬 앱] 노마드 코더 크롬 앱 클론코딩 #1 Login
기록하는_사람
2022. 10. 17. 19:55
Login - 사용자 이름 입력 받기
📌 HTML에서 input에 reuired, maxlength 등을 사용하려면, form 안에 input이 들어있어야 함.
📌 form 안에서 엔터를 눌렀을 때, input이 더 존재하지 않으면 자동으로 submit이 됨.
form 안의 버튼을 눌러도 submit 됨.
📌 submit되면 브라우저가 새로 고침됨.
Login - submit해도 새로고침 안하도록
📌 모든 EventListener function의 첫 번째 argument는 일어날 일들에 대한 정보를 가짐.
📌 .preventDefault( )
: 어떤 event에 대해 브라우저가 기본적으로 수행하는 동작을 하지 않도록 하는 것..
예를 들면, submit을 하면 기본적으로 브라우저를 새로고침하는 것.
📄 index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css"/>
<title>Momentum</title>
</head>
<body>
<form id="login-form">
<input required maxlength="15" type="text" placeholder="What is your name?"/>
<button>Log In</button>
</form>
<script src="app.js"></script>
</body>
</html>
📄 app.js
const loginForm = document.querySelector("#login-form");
const loginInput = document.querySelector("#login-form input");
function onLoginSubmit(event) {
event.preventDefault();
console.log(event);
}
loginForm.addEventListener("submit", onLoginSubmit);
SubmitEvent {isTrusted: true, submitter: button, type: 'submit', target: form#login-form, currentTarget: form#login-form, …}
Login - submit하면 form 전체가 사라지고, 텍스트 뜨도록
📌 string 합치는 방법
① "문자열" + 변수
② `문자열 ${변수명}`
📄 index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css"/>
<title>Momentum</title>
</head>
<body>
<form id="login-form">
<input required maxlength="15" type="text" placeholder="What is your name?"/>
<input type="submit" value="Log In"/>
</form>
<h1 id="greeting" class="hidden"></h1>
<script src="app.js"></script>
</body>
</html>
📄 style.css
.hidden {
display: none;
}
📄 app.js
const loginForm = document.querySelector("#login-form");
const loginInput = document.querySelector("#login-form input");
const greeting = document.querySelector("#greeting");
const HIDDEN_CLASSNAME = "hidden"
function onLoginSubmit(event) {
event.preventDefault();
loginForm.classList.add(HIDDEN_CLASSNAME);
const username = loginInput.value;
greeting.innerText = `Hello ${username}`;
greeting.classList.remove(HIDDEN_CLASSNAME);
}
loginForm.addEventListener("submit", onLoginSubmit);
Login - 새로 고침해도 계속 이름 저장되도록(localStorage)
📌 localStorage
: 브라우저에 데이터를 저장하고 가져다 사용할 수 있게 하는 API.
📌 localStorage.setItem("저장할 데이터 이름", "저장할 데이터");
: 데이터 저장.
📌 localStorage.getItem("가져올 데이터 이름");
: 데이터 가져오기.
📌 localStorage.removeItem("삭제할 데이터 이름");
: 데이터 삭제.
Login - 유저 정보가 있을 경우, 정보 띄우도록
📄 index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css"/>
<title>Momentum</title>
</head>
<body>
<form id="login-form" class="hidden">
<input required maxlength="15" type="text" placeholder="What is your name?"/>
<input type="submit" value="Log In"/>
</form>
<h1 id="greeting" class="hidden"></h1>
<script src="app.js"></script>
</body>
</html>
📄 style.css
.hidden {
display: none;
}
📄 app.js
const loginForm = document.querySelector("#login-form");
const loginInput = document.querySelector("#login-form input");
const greeting = document.querySelector("#greeting");
const HIDDEN_CLASSNAME = "hidden"
const USERNAME_KEY = "username"
function paintGreeting(username) {
greeting.innerText = `Hello ${username}`;
greeting.classList.remove(HIDDEN_CLASSNAME);
}
function onLoginSubmit(event) {
event.preventDefault();
loginForm.classList.add(HIDDEN_CLASSNAME);
const username = loginInput.value;
localStorage.setItem(USERNAME_KEY, username);
paintGreeting(username);
}
const savedUsername = localStorage.getItem(USERNAME_KEY);
if(savedUsername === null) { // username이 없는 경우,
loginForm.classList.remove(HIDDEN_CLASSNAME);
loginForm.addEventListener("submit", onLoginSubmit);
}
else { // username이 있는 경우,
paintGreeting(savedUsername);
}