강의/노마드 코더 강의

노마드 코더 - 바닐라 JS로 크롬 앱 만들기 - localStorage 값 불러오기

홍시_코딩기록 2023. 5. 26. 20:39

자바스크립트 빡통이를 불렀더니 뒤돌아보는 나

로또당첨 소취
 
 

//html

간단한....

form과 h1에 hidden 클래스 넣어주기

<!DOCTYPE html>
<html lang="ko">
<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">
    <title>Document</title>
    <link rel="stylesheet" href="style.css">
    <style>
        .hidden {display: none;}
    </style>
</head>
<body>
    <form class="hidden" id="login_form">
        <input type="text" maxlength="8" required placeholder="이름을 입력해주세요.">
        <input type="submit" value="login">
    </form>
    <h1 id="greeting" class="hidden"></h1>
    <script src="app_2.js"></script>
</body>
</html>

//javascript

const loginForm = document.getElementById('login_form');
const loginInput = loginForm.querySelector('input');
const greeting = document.querySelector('#greeting')

// 이렇게도 가능!
// const loginInput = document.querySelector('#login_form input');
// const loginButton = document.querySelector('#login_form button');

const HIDDEN_CLASSNAME = 'hidden'; //반복되는 string은 대문자로 저장해 놓는 것이 좋음
const USERNAME_KEY = "username";

function onLoginSubmit(event) {
    event.preventDefault(); //브라우저 기본동작 막기
    loginForm.classList.add(HIDDEN_CLASSNAME); //loginFOrm에 hidden_calssname 클래스 추가하기
    const username = loginInput.value; //변수 username = loginINput.value 값  저장
    localStorage.setItem(USERNAME_KEY, username); //localStorage에 저장 ("저장될 아이템의 이름", 값)
    paintGreetings(username);//코드 줄임
}

function paintGreetings(username) { //반복되는 코드로 인해 함수를 새로 만듦
    greeting.classList.remove(HIDDEN_CLASSNAME);
    // greeting.innerText = 'hello ' + username; 따옴표로 표기할 떄
    greeting.innerText = `hello ${username}님 반가워요`;//greeting에 텍스트 추가, 백틱으로 표기할 때 
}
const saveUsername = localStorage.getItem(USERNAME_KEY);

if(saveUsername ===null) {
    //폼 보여주기
    loginForm.classList.remove(HIDDEN_CLASSNAME);
    loginForm.addEventListener('submit', onLoginSubmit);
} else {
    //greeting 보여주기
    paintGreetings(saveUsername);//코드 줄임
}

ㄴ> 니꼬샘 강의대로 쓴 것

const loginForm = document.getElementById('login_form');
const loginInput = loginForm.querySelector('input');
const greeting = document.querySelector('#greeting')

//반복되는 string은 대문자로 저장해 놓는 것이 좋음
const HIDDEN_CLASSNAME = 'hidden'; 
const USERNAME_KEY = "username_key"; //로컬 스토리지 키 이름

// h1 유저네임 표기
function paintGreetings(tomato) { //반복되는 코드로 인해 함수를 새로 만듦, tomato는 단순 매개변수
    greeting.classList.remove(HIDDEN_CLASSNAME);
    // greeting.innerText = 'hello ' + tomato; 따옴표로 표기할 떄
    greeting.innerText = `hello ${tomato}님 반가워요`;//greeting에 텍스트 추가, 백틱으로 표기할 때 

}

const saveUsername = localStorage.getItem(USERNAME_KEY);
if(saveUsername === null) {//로컬스토리지에 값이 null일 때
    //로그인폼 보여주기
    loginForm.classList.remove(HIDDEN_CLASSNAME);
    //loginForm submit 이벤트 추가
    loginForm.addEventListener('submit', (event) => {
    event.preventDefault(); //브라우저 기본동작 막기
    loginForm.classList.add(HIDDEN_CLASSNAME); //loginFOrm에 hidden_calssname 클래스 추가하기
    const username = loginInput.value; //변수 username = input 입력값  저장, 이벤트가 발생해야 하기 때문에 이벤트 내부에서 실행
    localStorage.setItem(USERNAME_KEY, username); //localStorage에 저장 ("저장될 아이템의 이름", 값)
    paintGreetings(username);//코드 줄임
})
} else {//로컬스토리지에 값이 있을 때
    //h1 유저네임 보여주기
    paintGreetings(saveUsername);//코드 줄임
}

ㄴ> 내가 줄여본 것

줄일 수 있을 것 같아서 줄여봄. 일단 오류없이 잘 돌아가긴 함..

제일 헷갈렸던 부분

function paintGreetings(username) { //반복되는 코드로 인해 함수를 새로 만듦
    greeting.classList.remove(HIDDEN_CLASSNAME);
    // greeting.innerText = 'hello ' + username; 따옴표로 표기할 떄
    greeting.innerText = `hello ${username}님 반가워요`;//greeting에 텍스트 추가, 백틱으로 표기할 때 
}

분명 username은 loginForm안에 변수로 선언되어 있는데 여기에서도 username을 사용할 수 있는건지 이해가 안가고.. ㅎㅋ username때문에 오지게 헷갈렸음.

--결론

paintGreetings(username)에서 username은 변수로 선언된 input.value 가 아니고 그냥 매개변수, 그래서 다른 단어로 바꿔도 잘 표기됨