일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- foreach
- git
- 부트캠프 취업후기
- 리액트오류
- react hook
- map
- TypeScript
- 프론트엔드개발자
- 2024 sqld
- 야놀자 fe 1기
- Firebase
- sqld 자격증 시험
- 성능개선
- 부트캠프
- firebase rules
- js CRUD
- 야놀자x패스트캠퍼스
- 프론트엔드부트캠프후기
- 패스트캠퍼스
- Where
- 퍼블리셔 이직후기
- Filter
- reduce
- 패스트캠퍼스 부트캠프
- 국비지원
- sqld 55회
- css 꿀팁
- promise 비동기처리
- github
- 국비지원취업
- Today
- Total
Tech is created to fix problem
패스트캠퍼스X야놀자 프론트엔드 개발 부트캠프_클론과제 리팩토링 후기 본문
지난시간에 이어서 이번엔 코드리뷰를 토대로 수정을 해보자!
지난 포스팅 : https://furaha.tistory.com/18
1. 인라인으로 스타일 준 부분을 scss 에서 변수사용으로 바꿔보자
오류) 색상중에 몇가지만 색상으로 인식이 안되길래 왜지 싶었는데, 변수명 $ 뒤에 숫자로 시작했기 때문이었다,,ㅎㅎ
해결) 변수명을 $color- 로 앞부부을 전부 통일해주었다.
2. main.js 에서 로직이 아닌 부분은 별도 파일로 뺀 후 import 하여 사용하자!
로직이던 데이터이던 상관하지 않고 모두 main.js에 넣어주니까 거의 1000줄을 돌파하고 있었다..
용도에 맞게 js 파일도 모듈화시켜서 사용하자. export import 를 사용하려 했는데 아래 2가지 오류가 났다.
오류-1) Uncaught SyntaxError: Cannot use import statement outside a module (at main.js:5:1)
위 오류가 나는 원인은 아래 2가지이다.
그 중에 나의 오류 원인은 2번이었다.
- 모듈 스크립트로 구성되지 않은 파일에서 import 문을 사용하는 경우.
- HTML에서 type="module" 속성을 사용하지 않고 모듈 스크립트를 로드하려는 경우.
main.js 스크립트 연결을 할 때, type="module" 을 작성해주지 않았다ㅎ 잊지말자 타입 모듈!!
해결-1)
<script src="../assets/js/main.js" type="module"></script>
오류-2) Uncaught SyntaxError: The requested module './data.js' does not provide an export named 'slides' (at main.js:5:9)
이 오류는 모듈에서 올바른 내보내기(export)가 되지 않았기 때문이다.
해결-2) 나는 데이터 변수를 2개를 내보내려고 했는데 export default 라고 적어주어서 export 로 바꿨다.
여기서 export 와 export default 의 차이를 알게 되었는데,,
보내는 데이터가 여러개일 때, export 구문 사용하고 이것을 불러올 때는 {} 사용
const slides = ['slide1', 'slide2', 'slide3'];
const walls = ['wall1', 'wall2', 'wall3'];
export { slides, walls };
// main.js
import { slides, walls } from './data';
보내는 데이터가 한 개일 때, export default 를 사용하며 이것을 불러올 때는 {} 를 없애야 한다
const slides = ['slide1', 'slide2', 'slide3'];
export default { slides };
import slides from './data';
이렇게 데이터를 분리했다!!!
3. 버튼들 중에 전체 버튼은 클릭 안하게 하고 싶다. 그런데 이미 css 까지 끝난 상태,,,
버튼을 또 두 개로 분리해야하나 싶었는데,, 생각해보니 버튼을 지정할 때 css 선택자 사용이 가능하다!
querySelector, querySelectorAll 에서 css 선택자처럼 :not() :first-child 등 사용할 수 있다.
이 방법으로 덕분에 매우 편리하게 고민이 해결되었다ㅎㅎ
const wallBtn = document.querySelectorAll('.btm-cate:not(:first-child) .link');
4. for 보다는 forEach나 반환값이 필요하면 map 사용하기
for 문은 갯수를 내가 따로 지정해줘야하는 불편함이 있는데,
이것을 보완한 새로운 문법이 있기 때문에 forEach 사용이 더 권장된다
for 과 forEach 의 차이점을 알아봤다
- For 루프는 원래 사용되었던 접근 방식이지만 forEach 는 배열 요소를 반복하는 새로운 접근 방식이다
- For 루프는 필요한 경우 break 문을 사용하여 for 루프를 중단할 수 있지만 forEach 에서는 이와 같은 작업을 수행할 수 없다
- For 루프는 await와 함께 작동하지만 forEach 는 await와 완벽하게 작동하지 않는다
- For 루프를 사용한 성능은 forEach 루프보다 빠르다
상황에 따라서 두 개를 반복문을 선택해서 사용하면 될 것 같다!!
이 외에도 반복문 안에서 append 하지 않고 모든 요소를 만들고 한번에 append 하기 등의 코드 리뷰를 받았다.
느낀점)
코드 리뷰를 받는 문화를 접해본 적이 없었는데,
내가 마구잡이로 작성한 코드에 대해서 더 권장하는 방법, 더 간결한 문법들 등등 리뷰를 받아보니까
굉장히 유익하고 리뷰 받은 사항들이 기억에 오래 갈 것 같다.
'연습 또 연습 > js 연습문제' 카테고리의 다른 글
패스트캠퍼스X야놀자 프론트엔드 개발 부트캠프_JS과제 리팩토링 후기 (0) | 2023.08.28 |
---|---|
패스트캠퍼스X야놀자 프론트엔드 개발 부트캠프_JS과제 후기 (CRUD, Firebase DB 활용한 이미지 등록관리앱) (0) | 2023.08.27 |
패스트캠퍼스X야놀자 프론트엔드 개발 부트캠프_클론과제 후기 (카테고리 필터링 구현 map, filter, some) (0) | 2023.08.01 |
배열&객체 연습문제 2 (0) | 2023.07.20 |
배열&객체 연습문제 1 (0) | 2023.07.19 |