😊
js project - Text Editor & Todo List
September 24, 2022
시작
Text Editor 기본 로직
- 텍스트에 style을 바꿀 수 있는 버튼들을 생성하고 각 버튼을 클릭시 이벤트를 발생 + execCommand라는 문서 편집 관련 함수를 사용해 텍스트 에디터를 구현 (현재는 deprecated된 함수)
toggle
- <html요소>.classList.toggle을 통해 class를 넣었다 뺏다 할 수 있음
preventDefault
- preventDefault 함수를 사용해 html 요소에 기본적으로 동작하는 동작을 취소 시킬 수 있다
innerText, innerHTML, textContent
- innerText는 html 요소에서 마크업이 적용된 텍스트 내용을 가져 오고, innerHTML은 html 요소에서 텍스트 + html 태그 까지 같이 가져온다, textContent는 마크업이 적용되지 않은 텍스트 내용을 가져와 성능적으로 innerText보다 좋다고 한다
Todo List 기본 로직
- DOM 트리가 로딩이 완료 된 후 Todo 리스트를 가져옴
- 서버에 GET 메소드를 전달 -> 이 후 서버에서 받아온 내용을 가지고 todo element를 생성해 todo list에 append
- input 필드에 내용을 넣고 submit 하면 db에 Todo 업데이트
- input 필드 내용을 payload에 넣어 서버에 POST 메소드 전달 -> 이 후 getTodo 함수로 Todo 리스트 업데이트
- Todo 요소의 체크박스를 클릭하면 db의 체크 상태 업데이트
- 체크박스 상태를 payload에 넣어 서버에 PATCH 메소드 전달 -> 이 후 getTodo 함수로 Todo 리스트 업데이트
- 업데이트 버튼을 누르면 Todo 내용을 변경 가능
- input 필드 + 변경 확인 버튼을 보이게 하고 label + 내용 변경 버튼은 안보이게
- 내용 변경 후 확인 버튼을 누르면 db에 변경 내용 업데이트
- 변경 된 내용을 payload에 넣어 서버에 PATCH 메소드 전달 -> 이 후 getTodo 함수로 Todo 리스트 업데이트
- x 버튼을 누르면 Todo를 db에서 삭제
- 서버에 DELETE 메소드 전달 -> 이 후 getTodo 함수로 Todo 리스트 업데이트
fetch 관련 이슈
- fetch로 GET이외의 method를 사용하면 page refresh가 되는 현상이 있는데 원인을 잘 모르겠다
비동기 통신
- 비동기 통신 방법으로 fetch, ajax, axios가 있는데 ajax는 promise 기반이 아니라 콜백헬이나 에러 처리 한계를 가지고 있다고 한다. 그리고 fetch를 사용하면 headers 필드 내용이 필수로 들어가야 한다
closest 함수
- event.target.closest(<찾는 요소>) 메소드는 event가 발생한 요소 부터 부모 -> html 요소까지 트리를 이동하면서 매개변수에 적힌 요소를 찾는다
dataset
- dataset는 read only 만 가능한 속성이다. data-<이름> 으로 넣어준 속성인 경우 <해당 요소>data.set.<이름>으로 넣어준 속성에 접근 가능하다
style.display
- <요소>.style.display에 ‘block’, ‘none’을 넣어줌으로써 요소를 보였다 안보였다 할 수 있다
끝
😊