와! 드디어 일주일 간의 Instagram 클론 코딩 작업이 거의 마무리되었다. 코딩하면서 아쉬운 점이 자꾸 눈에 밟혀서 계속 붙잡고 있게 되었지만 다음주가 되면 리액트로 이걸 다시 작업해야하기 때문에 이쯤에서 마무리 지어야겠다는 생각이 들었다.
만들면서 생각했던 것이 많았고 html, css, javascript를 통해 만든 결과물이 나왔기 때문에 이것을 잊어버리지 않기 위해서 벨로그에 글을 남겨두어야겠다!
[Mission 1] 로그인 페이지 레이아웃 만들기
[Mission 2] ID, PW 입력 시 로그인 버튼 활성화 기능
[Mission 3] 메인 페이지 레이아웃
[Mission 4] 댓글 입력 후, 엔터나 '게시' 버튼 클릭 시 댓글 추가 기능
const init = () => {
form.addEventListener("keyup", checkMoreThanOneLetter);
btn.addEventListener("click", checkValidation);
};
init();
function checkMoreThanOneLetter(e) {
const inputId = document.getElementsByClassName("text-id")[0].value;
const inputPW = document.getElementsByClassName("pw")[0].value;
if (!inputId || !inputPW) {
btn.setAttribute("disabled", "");
} else {
btn.removeAttribute("disabled", "");
}
}
!inputId || !inputPW
이 부분을 굉장히 생각하기 어려웠다. !inputId || !inputPW
: Id 입력칸에 값이 없거나 Pw 입력칸에 값이 없다면 true를 출력한다는 의미이다.const init = () => {
postBtn.addEventListener("click", () => {
getValue();
eraseContent();
});
form.addEventListener("keypress", checkEnter);
};
init();
function checkEnter(e) {
if (e.code === "Enter") {
getValue();
eraseContent();
}
}
function getValue() {
const commentArea = document.querySelector(".comment-area");
const textValue = commentArea.value;
createComment(textValue);
}
function eraseContent() {
form[0].value = "";
}
function createComment(value) {
const ul = document.querySelector(".comment__ul");
const li = document.createElement("li");
li.setAttribute("class", "comment");
const nickname = "silvia.oh";
const newTags = `<div class="comment__div"><span class="nickname">${nickname}</span><p>${value}</p><button class="more">더 보기</button></div><div class="like-delete"><button class="mini-like-btn"><img alt="Heart" class="mini-heart" src="./img/heart.png" /></button><button class="delete-btn">삭제</button></div>`;
li.innerHTML = newTags;
ul.appendChild(li);
}
createElement
, setAttribute
, appendChild
함수를 사용해서 일일히 생성하고 클래스를 세팅해주고 하위 태그로 넣어서 코드가 너무 길어져 버렸다.innerHTML
을 사용하여 li 안에다가 넣어주고 매번 새로 생성되도록 appendChild로 li 태그를 ul 태그 하위에 넣어줬더니 코드가 훨씬 간결해졌다.function checkValidation() {
const valueId = inputId.value;
const valuePw = inputPw.value;
if (!valueId.includes("@")) {
alert("@를 포함시켜 주세요!");
} else if (valuePw.length < 5) {
alert("비밀번호는 5글자 이상이여야 합니다!");
}
}
Wecode에서 세션 중 멘토님들의 코드를 볼 기회가 있었다. 나와는 달리 너무나도 깔끔하게 작성되어있는 함수들을 보고 '와! 나도 저렇게 깔끔하고 정돈된 코드를 작성해보고싶다!'는 생각을 하게 되었다.
세상에는 뛰어나신 분들이 너무나도 많은 것 같다. 이번에 Wecode에 참여하게 되면서 같이 공부하는 여러 동기들의 코드와 결과물들을 보고 나도 더 열심히 노력해서 지금보다 더욱 발전한 결과물을 내고 싶다는 욕구가 퐁퐁 샘솟아올랐다.
내 실력이 아직 미흡해서 추가 구현 사항을 완료하지 못한 것이 천추의 한이다...😖
노력이 답이다! 매일 나에게 어떤 것이 부족한지 생각하고 이것을 해결하기 위해 어떻게 할 지 방법을 계속 생각하자. 끊임없이 생각하는 것이 지름길이다.
현재 ID, PW 유효성 검사만 구현하고 그 외의 추가 구현 사항을 다 완료하지 못하였는데 나중에 시간이 허락한다면 이것까지 구현해볼 것이다. 언제든지 구현할 수 있도록 마음 한 켠에 이것을 생각해놓자!