-
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주차 기본 과제 ] WEB 💛 TO DO MATE 🌈 없애보자!!!!! #1
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.
보니까 보미는 체크된 할일 목록을 따로 저장하는 checkedList라든가 localStorage에 할일 정보를 각각의 key, value로 따로따로 저장한다든가 하는 방법으로 코드가 굉장히 깔끔하게 작성될 수 있게 한거같아!!!!
나는 약간 이미 저장되어있는 정보를 탐색해서 찾아낼 수 있는것을 새로운 변수로 빼서 중복하여 저장되는것(?)을 피하려고 했거든? 근데 보미 코드보고 생각해보니까, 내가 굳이 왜 그렇게 했는지 이유가 명확하지 않더라구.. 오히려 코드만 더러워지고
그래서 많이 배워갔습니다!! 고생 많았어이 😙
'ctgr':'블로그', | ||
'id':'blog', |
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.
오오 보여지는 이름이랑 영문 아이디를 이렇게 같이 저장해놓으면 되는구나... 나는 왜 따로 배열을 하나더만든거지 ;_; 배워갑니다!
// window.localStorage.clear(); | ||
if (callNum){ | ||
for (var i=0;i<data.length;i++){ | ||
const todoObj= Object.entries(data[i].todo); |
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.
헐 entries라는 메소드 처음봐! key, value 값을 배열 형태로 반환할 수 있는 메소드구나!!! 기억해뒀다가 유용하게 써야겠어 (이랬는데 세미나에서 배웠던거 아니겠지,,? 🫢
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.
나도 헤매다가 발견한 메소든데 굳굳 ㅎㅎ
const todoObj= Object.entries(data[i].todo); | ||
for(var j=0;j<todoObj.length;j++){ | ||
// var todoList=JSON.stringify(todoObj[j][1]); | ||
window.localStorage.setItem(todoObj[j][0],todoObj[j][1]); |
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.
아 데이터의 key를 localStorage의 key로 사용한거야???
나는 전체 데이터를 하나의 key에 전부 저장했거든...
todoCtgr.append(ctgrIcon) | ||
todoContainer.append(todoCtgr) | ||
const keys=Object.keys(window.localStorage); | ||
keys.sort() |
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.
여기서 sort를 해주는 이유는 뭐야?!
*/ | ||
const callNum=0; | ||
var ctgrTarget=document.querySelectorAll('.ctgr-icon'); | ||
for(var i=0;i<ctgrTarget.length;i++){ |
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.
보니까 전체적으로 반복문이 필요할 떄는 항상 for문을 쓴 것 같은데 forEach나 map같은걸 써봐도 좋을 것 같아 ㅎㅎ 아직 정확한!! 차이는 나도 잘 모르겠지만 단순 반복이라면 for( ),배열을 순회하려면 forEach( ), 배열을 순회 후 새 배열을 얻고 싶다면 map( )을 많이 쓴다고 하네. 이것도 읽어보면 좋을거같아 for은 동기적이고 forEach는 비동기적이래!
modal.style.display='none'; | ||
const text=modalInput.value; | ||
var todoText=localStorage.getItem(ctgr); | ||
todoText=todoText+','+text; |
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.
혹시 할일 리스트를
'todo':{
'me':['스트레칭하기','물마시기']
}
여기 안에 리스트 형태로 저장해야 해서 ','를 붙인건가??
만약 그렇다면 아예 저 todo 안의 'me'에다가 push하는게 좀더 낫지 않을까?!
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.
보미 언니 넘넘 수고 많았어!!! 고민 결과 로컬 스토리지 이용해서 구현했구나!! 넘넘 잘했따 ㅎㅎ 최고야 진짜!!! :)
/** | ||
* 할 일 체크 후 하트의 숫자를 조정하는 부분 | ||
*/ | ||
var target=document.querySelectorAll('.todo-icon'); |
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.
옹 var 은 지양하는 게 좋은데 혹시 여기서 var 을 써준 특별한 이유가 있을까용??? :)
function todoPlus(postTarget){ | ||
const todo=document.createElement('div') | ||
todo.setAttribute('class','todo') | ||
const todoIcon=document.createElement('img') | ||
todoIcon.setAttribute('src','./images/check-to-slot-solid.svg') | ||
todoIcon.setAttribute('alt','할일체크아이콘') | ||
todoIcon.setAttribute('class','todo-icon') | ||
todo.innerText=postTarget | ||
todo.prepend(todoIcon) | ||
todo.setAttribute('id',postTarget) | ||
return todo | ||
} |
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.
개행 넣어주면 더 가독성 잇겠다!!! :)
todo.setAttribute('id',postTarget) | ||
return todo | ||
} | ||
for (var i=0;i<data.length;i++){ |
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.
이 부분도 함수로 만들어서 분리해주면 더 가독성 있구 좋을 것 같다!!! :)
todoContainer.setAttribute('class','todo-container') | ||
maintodoContainer.append(todoContainer) | ||
const todoCtgr=document.createElement('div') | ||
todoCtgr.setAttribute('class','todo-category') |
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.
setAttribute 로 깔끔하게 구현했다!!! :)
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.
반복되는 요소는 map 을 사용해서 구현하는 연습을 해보면 좋을 것 같다는 쉥각!!! 넘 수고 햇어 ㅎㅎ :)
<div class="calender-container"> | ||
<div class="todo-day">월</div> | ||
<div class="todo-number"> | ||
<div class="todo-num"> | ||
6 | ||
</div> | ||
<img src="./images/heart-solid.svg" alt="날짜아이콘"> | ||
</div> | ||
<div class="todo-daynum">17</div> | ||
</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.
요 부분도 반복되니까 data 파일 map 돌려서 구현해도 좋을 것 같아!!! :)
const ctgr=e.target.parentNode.id; | ||
const modal = document.querySelector('#modal-container') | ||
modal.style.display='block'; | ||
const modalBtn = document.querySelector('#modal-container #modal button') |
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.
id 로 dom 요소를 가져오고 싶은 거라면 getElementById 를 써 봐도 좋을 것 같아!!!! :)
✨ 구현 기능 명세
기본과제
✅
하트 안의 숫자
✅
카테고리별 할일 추가
✅
달력 / MY 버튼 클릭시 페이지 이동
심화 과제
✅ 카테고리별 할일 추가
✅ Vanilla JavaScript로 SPA구현하기
1. 바닐라자스 → 라우터 구현해보기
2. 👇 폴더구조 참고 + 응용
✅ MY 페이지 : Drag and Drop
🌼 PR Point
1. 할일 숫자 연동
checkedList
로 구분해주었습니다.2. 할일 추가와 localStorage 연동
할 일을 윈도우 창이 로드될 때마다 localStorage에서 가져와서, 새로운 할 일이 추가 되어서 localStorage가 업데이트되었을 때 새로운 데이터를 가져와 보여줄 수 있도록 하였습니다. 이 과정에서 데이터의 키, 값을 관리하고 불러오는 과정이 조금 헷갈렸던 것 같아요 ㅎㅎ.
이렇게 로컬 스토리지를 연동함에 따라 할일 데이터를 가져오는 부분도 관련해서 조금 수정되었습니다 !
🥺 소요 시간, 어려웠던 점
6h
🌈 구현 결과물
할 일에 대한 아이콘이 체크될 때마다 금요일의 하트 속 숫자가 줄어드는 모습입니다.
카테고리에 대한 할 일을 추가할 수 있는 부분입니다.