TIL
241030 TIL
GoJay
2024. 10. 30. 23:31
TODO App 만들기
- 자바스크립트 모듈을 이용해서 컴포넌트를 쪼개고,
App.js
에서 통합으로 상태를 관리할 수 있도록 애플리케이션을 만들었다. - 상위 컴포넌트인
App.js
에서는 최대한 '상태의 관리'에 집중하고, 뷰를 그리는 것과 로직을 처리하는 것들은 하위 컴포넌트에서 처리되도록 하기 위해 고민했다(쉽지 않았다). - 하위 컴포넌트에서 로직을 처리하면서 변경되는 상태는 다시
App.js
로 끌어올려서 의존이 있는 다른 컴포넌트의setState()
를 호출해 변경된 상태를 등록해줘야 한다. 그러기 위해App.js
에 있는setState()
메서드를 하위 컴포턴트들의 파라미터로 전달하고, 하위 컴포넌트에서 상태의 변화를 상위 컴포넌트인App.js
의setState()
에 인자로 전달했다. - 해당 방식으로 하다보니, 하위 컴포넌트에서 함수를 쪼개고, 인자로 필요한 값들을 전달할 때, 상위 컴포넌트의
setState()
가 여러 군데에서 참조되면서 상태의 흐름을 파악하는 게 복잡해지는 문제가 있었다. - 아직은 도구의 도움보단, 순수 언어로만 구현하는 연습을 더 해보려고 한다. 내일 한번 더 처음부터 개발해보면서 어디서 어떻게 상태를 관리해야 효율적이고, 코드적으로도 상태의 흐름을 직관적으로 파악할 수 있을지 다시 고민해봐야겠다.
- 오늘 개발한 부분에서 100% 완벽하게 구현하지 못한 부분이 있었다.
- TODO Items의 업데이트를 TODO 상태를 관리하는 배열을 기반으로 한 게 아니라, DOM에서 캐치한
$ul
태그의 하위 요소 기준으로 생성-토글했다. - 그렇게 하니, filter의 상태를 '완료'로 해둔 상태에서 새로운 TODO item을 추가했을 때 필터가 적용되지 않고 화면에 뿌려지는 문제가 있었다.
- 내일은 이 부분에 좀 더 중점을 두고 다시 구현해봐야겠다.
- TODO Items의 업데이트를 TODO 상태를 관리하는 배열을 기반으로 한 게 아니라, DOM에서 캐치한
Udemy <클린코드 자바스크립트>
- 데이터의 타입을 검사할 때
typeof
에만 의존하면 안된다.typeof
는 원시 타입인null
을object
로 평가하고, 함수인function
도object
로 평가한다. - 원시 타입들도 래퍼 객체인 생성자 함수로 만든 값들은
typeof
연산을 했을 때object
가 나온다.typeof
는 여러 가지로 불완전하다. - 객체 타입의 데이터를 확인할 땐
instanceof
를 활용하면 좋다.myFunc instanceof Function
이런 식으로 하면 함수를function
타입으로 점검할 수 있다. - 하지만,
instanceof
는 프로토타입 체인을 통해 검색이 되고,myFunc instanceof Object
로 해도 참이 나온다(자바스크립트에서 함수는 객체다).instanceof
도 정답은 아니다. - 다양한 타입 확인이 필요한 상황마다 그 상황에 맞는 적절한 방식을 찾아서 사용해야한다. 여러 케이스를 잘 다뤄보면서 자바스크립트 타입 변환에 익숙해지자.
- 함수의 매개변수로 너무 많은 파라미터를 넘기도록 함수를 설계하면 문제가 될 수 있다.
- 함수의 파라미터가 길어질 것 같으면 함수를 감싸는 다른 함수로 사용 빈도가 덜한 인자를 분리하거나, rest 파라미터, 객체 구조 분해 할당 등을 적극적으로 사용하자.
- 특히, 객체 구조 분해 할당으로 인자를 넘기면 인자의 순서에 상관 없이 접근이 가능하기 때문에 안전하다.
- 아직 객체 구조 분해 할당이 익숙하지 않은데, 자꾸 써보면서 문법에 익숙해져보자.
코테 문제 풀기
- 실패율
- 로또의 최고 순위와 최저 순위
- [1차] 다트게임
- 대충 만든 자판
- 둘만의 암호
- 오늘 푼 문제들은 많이 어렵진 않았다. 내일부턴 2단계 문제들 중에 아직 공부하지 않은 알고리즘을 적용해야만 풀리는 문제를 제외하고 하나씩 풀어봐야겠다.