-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[ 2주차 기본/심화(to be continue..) ] 가계부 💸 #5
base: main
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
바닐라 자스..... 넘 어렵다.. 수고해써🫶🏻
inputAmount=event.target.value; | ||
} | ||
}) | ||
m_content.addEventListener("change",function(event){ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
전역에 두지말고 함수로 묶으면 더 좋을거같오..!!
} | ||
|
||
function submitList(){ | ||
if(inputCategory=="" || inputAmount==""|| inputContent==""){ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
위에서 전역으로 eventlistener 선언했을 때 하나는 event가 발생하고 다른건 안발생하면 어떻게 되는거지? 하고 궁금했는데 여기서 처리를 해주는건가???
}) | ||
} | ||
|
||
function deleteHistory(event){ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
내가 삭제 모달 구현할 때 [fillter로 삭제][함수 모달띄우기]로 나눠서 구현하니까 이벤트리스너가 중복되어서 이전에 아니요 눌렀던 애들까지 다 삭제되는 이슈가 있어서.. 포기하고 코드리뷰 하러 왔는데
언니처럼 함수를 나누지 않고 한 함수안에서 구현하니까 이벤트리스너가 중복되지 않는구나!! 함수를 나누는 과정에서 뭔가 문제라는걸 알아냈어...뭐가 문제인진 더 생각해봐야겠당
const idx= history_list.findIndex(each => each.detail ===event.target.previousElementSibling.previousElementSibling.innerText) | ||
history_list.splice(idx,1); | ||
closeModal.style.display="none"; | ||
doFilter() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
나도 삭제하거나 추가할 때 계산하고 fillter해서 보여주는 함수 계속 중복해서 썼어!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
바닐라 자스가 진짜 제일 어려운데... 너무 너무 수고해써!!!
추가적으로 함수 구현할 때 기능별로 독립적으로 구현하도록 만들기, 캡슐화 하기 등에 대해 더 고민해보면 좋을것 같습니댜!
다음주도 화이팅구🖤
<section id="detaillist"> | ||
</section> | ||
<section id="bottom"> | ||
<div>+</div> | ||
</section> | ||
<section class="modalWrap"> | ||
<div class="modalBody"> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
전체적으로 class명, id명을 혼합해서 사용하는것 같아요!
css 스타일링 할 때, js로 요소를 가져올 때 일정한 규칙 없이 클래스, id를 사용하면 개발 할 때도 어렵고 유지보수 및 가독성 측면에서도 단점이 될 수 있습니댜!
이전에 알려주었던 bem 방식 등을 참고해서,
id, class 중 어떤 것을 사용해야 할지 / 클래스명이나 id 명을 짓는 일정한 규칙 등에 대해 더 고민해보면 좋을것 같아!!
let clickedIncome=true, clickedOutcome=true; | ||
|
||
const total=document.querySelector("#totalMoney"); | ||
let detaillist=document.querySelector("#detaillist"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
detaillist는 변경되지 않는 요소인것 같은데..!
const
가 아닌 let
으로 선언한 이유가 있을까용? 궁금합니다!!
const eachlist = document.createElement('div'); | ||
const category = document.createElement('div'); | ||
const detail = document.createElement('div'); | ||
const amount = document.createElement('div'); | ||
const xbtn = document.createElement('div'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
js로 element를 create 할 때도! div보다 section, article, button
등의 시맨틱 태그들을 사용해주면 더 좋을것 같아용
eachlist.classList.add('eachlist'); | ||
detaillist.appendChild(eachlist); | ||
|
||
each.amount<0 ? amount.classList.add('out') : amount.classList.add('in') |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
삼항연산자 너무 적절히 잘 썼다 !!!🔥
} | ||
|
||
function submitList(){ | ||
if(inputCategory=="" || inputAmount==""|| inputContent==""){ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
논리연산자로 조건문 구현한거 넘 완벽해..👍
closeModal.style.display="none"; | ||
doFilter() | ||
calculateHistory(); | ||
} | ||
}) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
리스트 삭제 시 필터링 함수가 실행되어야 하는 이유에 대해 궁금합니다!!
doFilter()를 여기서 실행하지 않으면 결과 값이 어떻게 되나요 ?!
let history_list=[ | ||
{ | ||
category:"과외비", | ||
detail:"10월 월급", | ||
amount: 500000 | ||
},{ | ||
category:"식비", | ||
detail:"서브웨이", | ||
amount:-30000 | ||
},{ | ||
category:"용돈", | ||
detail:"10월 용돈", | ||
amount:100000 | ||
},{ | ||
category:"식비", | ||
detail:"수육국밥", | ||
amount:-10000 | ||
}]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
컨벤션을 어떻게 정하냐에 따라 달라지겠지만,
보통 상수값은 대문자
로 표시해줘서 이 값은 상수값이다!라는 점을 한 눈에 알아볼수 있게 해주는 것이 좋아요!
let history_list=[ | |
{ | |
category:"과외비", | |
detail:"10월 월급", | |
amount: 500000 | |
},{ | |
category:"식비", | |
detail:"서브웨이", | |
amount:-30000 | |
},{ | |
category:"용돈", | |
detail:"10월 용돈", | |
amount:100000 | |
},{ | |
category:"식비", | |
detail:"수육국밥", | |
amount:-10000 | |
}]; | |
let HISTORY_LIST=[ | |
{ | |
category:"과외비", | |
detail:"10월 월급", | |
amount: 500000 | |
},{ | |
category:"식비", | |
detail:"서브웨이", | |
amount:-30000 | |
},{ | |
category:"용돈", | |
detail:"10월 용돈", | |
amount:100000 | |
},{ | |
category:"식비", | |
detail:"수육국밥", | |
amount:-10000 | |
}]; |
let init_balance=0; | ||
let income_total=0; | ||
let outcome_total=0; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
여기도 magic number, 수치값 등을 나타내는 상수는 대문자로 바꿔주면 더 좋을것 같습니당!
let init_balance=0; | |
let income_total=0; | |
let outcome_total=0; | |
let INIT_BALANCE=0; | |
let INCOME_TOTAL=0; | |
let OUTCOME_TOTAL=0; |
이런식으로 나타내면 단순 변수인지, 상수화해서 나타낸 값인지 한 눈에 비교하기 쉽습니댱
for(var i=0 ; i < radio.length ; i++){ | ||
radio[i].addEventListener('click', function () { | ||
if(this.id === "add-in"){ | ||
console.log("in"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
console.log는 꼬옥 지워주기 !!
document.getElementById('add-category-in').style.display="block"; | ||
document.getElementById('add-category-out').style.display="none"; | ||
}else{ | ||
console.log("out"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
요기도 ~
✨ 구현 기능 명세
최초 데이터 ✅
상수로
INIT_BALANCE
,HISTORY_LIST
데이터를 가집니다. (상수명은 자유)INIT_BALANCE
= 0HISTORY_LIST
: 입출금 내역 리스트 (4개
)최초 실행시 위 상수 데이터들 이용해 렌더링합니다. (즉, html에 직접 박아놓는 하드코딩 ❌) ✅
→ 나의 자산은
INIT_BALANCE
로부터 4개의 입출금 내역 리스트를 반영하여 보여줍니다.총수입 / 총지출 ✅
HISTORY_LIST
에 있는 수입 내역과 지출 내역을 계산해서 총수입, 총지출을 보여줍니다. ✅수입/지출 필터링 ✅
리스트 삭제 ✅
X
버튼을 누르면 해당 리스트가 삭제됩니다. ✅리스트 추가 ✅
수입
지출
버튼 ✅카테고리
를 선택 ✅수입
을 선택하면 수입 관련된 항목들이,지출
을 선택하면 종류에 지출 관련된 항목들이 나옵니다.금액
과내용
입력 input ✅저장하기
버튼 ✅닫기
버튼 ✅** 리스트 삭제 모달 ** ✅
x
버튼 클릭시 삭제 모달이 나타납니다. ✅리스트 추가 ✅
alert
를 띄워 막습니다. ✅alert
를 띄워 막습니다. ✅모달 백그라운드 & 애니메이션 (삭제, 추가)
+
클릭시 추가 모달이 아래에서 위로 올라옵니다.카테고리 추가
Enter
키를 누르면 카테고리가 추가됩니다.금액
,
로 표시됩니다. (나의 자산, 총수입/지출, 내역 리스트, 리스트 추가 input)💎 PR Point
🥺 소요 시간, 어려웠던 점
6h
+2h(심화 보충)
🌈 구현 결과물
https://www.notion.so/dosopt/2-cdada8f4d1c944c09f54d3646b7108c8?pvs=4