320x100
โ ์ด ํฌ์คํ ์ ๋ ธ๋ง๋์ฝ๋ - "๋ฐ๋๋ผ JS๋ก ํฌ๋กฌ ์ฑ ๋ง๋ค๊ธฐ๋ฅผ ๋ค์ผ๋ฉด์ ๊นํ๋ธ์ ๊ธฐ๋กํ ํ๊ธฐ๋ฅผ ์ฎ๊ธด ๋ด์ฉ์ ๋๋ค.
๐ value getting, saving, loading ํ๋ ๋ฐฉ๋ฒ
๐ฑ Getting Username
๐ ์ฌ์ฉ์๊ฐ Input์ ์ ๋ ฅํ ๊ฐ์ ํ๋ฉด์ ์ถ๋ ฅํ๊ธฐ
- Form ์ ์ถ ํ Form์ ํ๋ฉด์์ ์ฌ๋ผ์ง๊ฒํ๊ธฐ(CSS ์ด์ฉ)
- CSS class hidden ์ด์ฉํ๊ธฐ [ display : none ]
- input์ value๋ฅผ username์ผ๋ก ํ ๋น
- const username = loginInput.value;
- ์์์ฝ๋
<!-- HTML ํ์ผ -->
<form class="hidden" 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>`
// js ํ์ผ
const loginForm = document.querySelector("#login-form");
const loginInput = document.querySelector("#login-form input");
const loginBtn = document.querySelector("#login-form button");
const greeting = document.querySelector("#greeting");
//์ผ๋ฐ์ ์ผ๋ก string๋ง ํฌํจ๋ ๋ณ์๋ ๋๋ฌธ์๋ก ํ๊ธฐํ๊ณ ,
// string์ ์ ์ฅํ๊ณ ์ถ์ ๋ ์ฌ์ฉ
const HIDDEN_CLASSNAME = "hidden";
function onLoginSubmit(event) {
event.preventDefault();
loginForm.classList.add(HIDDEN_CLASSNAME)
//์ ์ ๋ค์์ ๋ณ์๋ก ์ ์ฅ
const username = loginInput.value;
// "Hello " + username ๋ณด๋ค ํธ๋ฆฌํ ํ๊ธฐ๋ฒ ( `${๊ฐ}` ์ ๊ทํํ์)
greeting.innerText = `Hello ${username}`;
greeting.classList.remove(HIDDEN_CLASSNAME)
}
loginForm.addEventListener("submit", onLoginSubmit);
๐ฑ Saving Username
๐ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ Input์ value๋ฅผ ์ ์ฅํด๋๋ ๋ฐฉ๋ฒ
- LocalStorage ์ฌ์ฉํ๊ธฐ
- ๋ธ๋ผ์ฐ์ ์ ๊ฐ์ ์ ์ฅํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
- ๋ฏธ๋ DB์ ๋๋
- localStorage.setItem : ๊ฐ์ ์ ์ฅํ ๋ ์ฌ์ฉ
- localStorage.getItem : ๊ฐ์ ๊ฐ์ ธ์ฌ ๋ ์ฌ์ฉ
- localStorage.removeItem : ๊ฐ์ ์ง์ธ ๋ ์ฌ์ฉ
- ์์์ฝ๋
function onLoginSubmit(event) {
event.preventDefault();
loginForm.classList.add(HIDDEN_CLASSNAME);
const username = loginInput.value; // localStorage ์ฌ์ฉ
localStorage.setItem("username", username);
greeting.innerText = `Hello ${username}`;
greeting.classList.remove(HIDDEN_CLASSNAME)
}
- ๊ฐ์ ํ ๋ฐฉํฅ
- ํ์ฌ → ์ด๋ฆ ์
๋ ฅ -> ๋ก๊ทธ์ธ๋ฒํผ or ์ํฐ -> Hello ์ด๋ฆ! -> ์ด๋ฆ์ด LocalStorage์ ์ ์ฅ
But! ์๋ก๊ณ ์นจ ์ username๊ฐ์ localStrage์ ์์ง๋ง ์ฌ์ ํ form์ ๋ค์ ๋ํ๋๋คโ - ๐ localStorage์
- username๊ฐ๐๐ปโ๏ธ → Hello ์ด๋ฆ ํ๋ฉด ๋ณด์ฌ์ค
- username ๐ ๐ปโ๏ธ → ๋ก๊ทธ์ธ ํผ ๋์ค๋๋ก ์ค์
- ํ์ฌ → ์ด๋ฆ ์
๋ ฅ -> ๋ก๊ทธ์ธ๋ฒํผ or ์ํฐ -> Hello ์ด๋ฆ! -> ์ด๋ฆ์ด LocalStorage์ ์ ์ฅ
๐ฑ Loading Username
๐ localStorage์ ๊ฐ์ ์ ๋ฎค์ ๋ฐ๋ผ์ ํ๋ฉด์ ๋ค๋ฅด๊ฒ ๋ณด์ด๋๋ก ์ค์ ํ๊ธฐ
- ํด์ผํ ์ผ
- username์ด ๋๋ฌด ๋ง์ด ๋ฐ๋ณต๋๊ณ ์์ → ์คํ ์ ์ค๋ฅ๊ฐ๋ฅ์ฑ → USERNAME_KEY๋ก ๋ณ์์ค์
- ์์์ฝ๋
const USERNAME_KEY = "username";
function onLoginSubmit(event) {
event.preventDefault();
loginForm.classList.add(HIDDEN_CLASSNAME);
const USERNAME_KEY = loginInput.value;
localStorage.setItem("USERNAME_KEY", username);
greeting.innerText = `Hello ${username}`;
greeting.classList.remove(HIDDEN_CLASSNAME);
}
const savedUsername = localStorage.getItem("USERNAME_KEY");
// ์ด ๊ตฌ๋ฌธ์ ์์ฑํ๊ธฐ ์ํด form, greeting๋ชจ๋ hidden์ํ๋ก ์์ํ๋ค.
if (savedUsername === null) {
// show the form
loginForm.classList.remove(HIDDEN_CLASSNAME);
loginForm.addEventListener("submit", onLoginSubmit);
}else {
// show the greetings
greeting.innerText = Hello ${savedUsername};
greeting.classList.remove(HIDDEN_CLASSNAME);
}
- ๊ฐ์ ํ์ํ ์
: ๊ฐ์ ๋์์ 2๋ฒ ๋ฐ๋ณตํ๊ณ ์์
onLoginSubmit( )๊ณผ if๋ฌธ์์
๐ `(greeting.innerText, greeting.classList.remove(HIDDEN_CLASSNAME))` ๋ฐ๋ณต ๋๋ค. - ์ด๋ฐ๊ฒ์ ํจ์๋ก ๋ง๋๋ ๊ฒ์ด ๋ ์ข๋ค.
→ `paintGreetings ๋ผ๋ ํจ์ ๋ง๋ค๊ธฐ - ๊ฐ์ ๋ ์ฝ๋
const loginForm = document.querySelector("#login-form");
const loginInput = document.querySelector("#login-form input");
const loginBtn = document.querySelector("#login-form button");
const greeting = document.querySelector("#greeting");
const HIDDEN_CLASSNAME = "hidden";
const USERNAME_KEY = "username";
function onLoginSubmit(event) {
event.preventDefault();
loginForm.classList.add(HIDDEN_CLASSNAME);
const USERNAME_KEY = loginInput.value;
localStorage.setItem("USERNAME_KEY", username);
paintGreetings(username);
}
function paintGreetings(username) {
greeting.innerText = `Hello ${username}`;
greeting.classList.remove(HIDDEN_CLASSNAME);
}
const savedUsername = localStorage.getItem("USERNAME_KEY");
if (savedUsername === null) {
// show the form
loginForm.classList.remove(HIDDEN_CLASSNAME);
loginForm.addEventListener("submit", onLoginSubmit);
}else {
// show the greetings
paintGreetings(savedUsername);
}
- paintGreetingํจ์`๋ฅผ ์ด์ฉํด์ ์ฝ๋ ๋ฐ๋ณต์ ์ค์์ง๋ง,
์ฐ๋ฆฌ๊ฐ ํจ์๋ฅผ ํธ์ถํ๋ ์์น์ ๋ฐ๋ผ ์ ์ ์ ๋ณด๋ ๋ค๋ฅธ ๊ณณ์์ ์ค๊ฒ ๋๋ค.- local Storage์ ์ ์ ์ ๋ณด โญ → ๊ฑฐ๊ธฐ์ ์ ์ ์ ๋ณด๋ฅผ ๋ฐ์์ ์ธ์๋ก ๋ฃ๋๋ค.
- ๋ง์ฝ local storage์ ์ ์ ์ ๋ณด โ → form์ submit์ ๊ธฐ๋ค๋ฆผ → form์ด submit๋๋ฉด input์ผ๋ก๋ถํฐ ์ ์ ์ ๋ณด๋ฅผ ๋ฐ์ → input์์ ๋ฐ์ user๋ฅผ ๊ฐ์ง patint Greetings๋ฅผ ํธ์ถ
๋ฐ์ํ
'JavaScript > Nomad Coders' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] ๐ก Day 9 - ๋๋ค์ผ๋ก ๋ช ์ธ, ๋ฐฐ๊ฒฝ ์ค์ ํ๊ธฐ (0) | 2022.04.16 |
---|---|
[TIL] ๐ก Day 8 - JavaScript๋ก ํ์ด๋จธ ๋ง๋ค๊ธฐ (0) | 2022.04.16 |
[TIL] ๐ก Day 6 - ํจ์๋ ์ ๋ณด๋ฅผ ๋ด๊ณ (0) | 2022.03.31 |
[ํ๊ธฐ] ๋ ธ๋ง๋์ฝ๋ ๋ฐ๋๋ผJS ์ฑ๋ฆฐ์ง 1์ฃผ์ผ ์ง๋ ์์ ํ๊ธฐ (0) | 2022.03.16 |
[TIL] ๐ก Day 5 - JS๋ฅผ ํตํด์ CSS๋ฅผ ์กฐ์ํ๋ ๋ฐฉ๋ฒ๋ค (0) | 2022.03.13 |
๋๊ธ