프로그래머스에서 적용한 vanilla-js로 만든 todoList코드다.
구현 조건은 아래와 같았다.
기본 요구사항
TodoList 라는 이름을 가진 함수를 작성합니다.
해당 함수는 new 키워드를 이용해 생성되며, 파라메터로 위의 data를 넘겨받습니다. ex) var todoList = new TodoList(data);
TodoList 함수는 파라메터로 넘겨받은 data를 this 키워드를 이용해 함수 내 변수로 저장해둡니다. this.data = data 이런 식으로요.
this.render = function{ ... } 형태로 TodoList 함수 내에 render function을 작성합니다.
이 함수는 data를 이용해 data 배열을 순회하며 각 배열첨자의 text를 html로 만든 뒤, todo-list라는 id를 가진 div에 data의 text가 렌더링되도록 작성합니다. 아래 Tip을 참고하세요.
위에서 작성한 TodoList 함수를 var todoList = new TodoList(data); 형태로 생성한 후, todoList.render() 함수를 호출하여 실행되게 작성합니다.
이 외의 보너스 구현사항이 더 있었는데, 아래와 같았다.
<s>
태그 이용하여 삭선처리 해주기<html>
<head>
<title>Mission 1</title>
<meta charset="utf-8" />
</head>
<body>
<div id="todo-list"></div>
<div id="mango-list"></div>
<div id="clean-list"></div>
<script>
const data = [
{
text: 'JS 공부하기',
isCompleted: true,
},
{
text: 'JS 복습하기',
isCompleted: false,
},
];
const data2 = [
{
text: '망고 털 빗겨주기',
isCompleted: false,
},
{
text: '망고 물 주기',
isCompleted: true,
},
{
text: '망고 밥주기',
isCompleted: false,
},
{
text: '장난감으로 놀아주기',
isCompleted: true,
},
];
const data3 = [
{
text: '주방 싱크대 청소',
isCompleted: false,
},
{
text: '방 옷 청소',
isCompleted: false,
},
{
text: '작은방 책상 청소',
isCompleted: true,
},
{
text: '거실 바닥 청소',
isCompleted: true,
},
];
class TodoList {
constructor(data, container) {
//new 키워드 안 붙이고 함수 실행 시
if (!(this instanceof TodoList)) {
throw new Error('error message');
}
//null 혹은 undefined
if (data === null || data === undefined) {
throw new Error('error message');
}
//array가 아닌 형태
if (!Array.isArray(data)) {
throw new Error('error message');
}
//data가 유효한 형식이 아닐때
//data는 배열의 형태로 되어있고, 안의 key와 value는 string으로 되어있다.
//data를 돌면서 안의 아이템을 검증해야함으로, forEach를 썼다.
data.forEach((item) => {
if (typeof item !== 'object' || typeof item.text !== 'string') {
throw new Error('error message');
}
});
this.data = data;
this.container = container;
}
setState(nextData) {
this.data = nextData;
this.render();
}
render() {
const container = document.getElementById(this.container);
this.data.forEach((item) => {
const p = document.createElement('p');
const s = document.createElement('s');
//p 태그 안에 내용정하기
//isComplete조건문 추가. p 내부에 s태그가 생긴다.
if (item.isCompleted === true) {
s.textContent = item.text;
p.appendChild(s);
//아닐 경우에는 그냥 p태그로 추가
} else {
p.textContent = item.text;
}
container.append(p);
});
}
}
const todoList = new TodoList(data, 'todo-list');
const mangoList = new TodoList(data2, 'mango-list');
const cleanList = new TodoList(data3, 'clean-list');
todoList.render();
todoList.setState(data2);
mangoList.render();
cleanList.render();
console.log(todoList);
</script>
</body>
</html>
출처 : vanillaJS 스터디