Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
PR 내용
카테고리 필터, 스터리 리스트를 SSR 방식에서 CSR 방식으로 변경.
기존에는 카테고리 버튼을 클릭할 때마다 서버에서 SSR된 템플릿을 계속 새롭게 전달해줘서 매번 페이지가 새로고침 되었음.
현재는 카테고리 버튼을 클릭하면, fetch API를 이용하여 해당 카테고리에 맞는 데이터를 불러와 클라이언트사이드에서 search-list 부분만 새롭게 렌더링 하는 방식. 따라서 페이지 새로고침이 되지 않음.
🚨 현재 페이지가 깜빡 거리는 것처럼 느껴지는 부분은, 새롭게 렌더링이 되는 동안 잠시 빈 화면이 노출되기 때문인 것으로 추측되는데, 이는 추후 '로딩중 입니다' 같은 UI를 추가하여 해결 가능.
실제로는 페이지가 새로고침 되고 있는 것이 아님. (URL이 계속 그대로임)
변경 사항
view/includes/index/search-list.ejs
가 필요 없어짐에 따라, 해당 파일과 해당 파일의 js를 담당하던pulic/js/main-category-filter.js
를 삭제.CSR은 새롭게 생성한
public/js/index.js
에서 모두 담당하게 됨.routes/index.js
에서 라우팅과 함께 DB로부터 데이터 수집을 함께 수행했음. 그러나 이제 해당 부분은 CSR 처리되기 때문에 index.js에서 DB 접근을 할 필요가 없어졌음.routes/listApi.js
를 새롭게 생성하여, fetch api만 담당하는 라우터를 만들었음.메인페이지, 대분류, 중분류에 해당되는 요청을 파싱하여 데이터를 JSON 형태로 응답해준다.
이에따라
server.js
에도 Router 추가.http://localhost:3000/list/카테고리이름
로 요청을 한다. 기존 소분류 명 중에 '경영/사무', 'it/인터넷'의 경우 텍스트에 '/'이 포함되어 있어 url에 오류를 발생시키는 문제가 나타남. 따라서 '/'를 ','로 수정했음.핵심 내용
CSR 로직을 담당하는
public/js/index.js
의 로직은 다음과 같음.: fetchGroup 함수는 선택된 카테고리에 해당되는 스터디 정보를 얻기 위해 fetch 요청을 listApi로 보낸다. 받아온 JSON 데이터를 파싱하여,
renderGroup
함수로 각 데이터를 렌더링 해준다.: renderGroup 함수는
createElement
를 사용하여 기존에 테이블 태그로 작성되었던 스터디 그룹 item을 생성한다. 하위 요소들도 생성하여 appendChild 한다.요소 생성이 끝나면, item을
search-list
div에 appendChild 하여 화면에 렌더링한다.groupItem
div에 클릭 이벤트 리스너를 걸어서 클릭 시, 해당 스터디 소개 페이지로 이동하도록 만든다.fetchGroups('전체')
를 실행하여 전체 스터디 리스트를 보여준다.searchList.innerHTML = '';
를 통해 먼저 카테고리 버튼을 클릭하게 되면, 기존에 렌더링 되어있던 search-list를 지워준다.buttonDisplay
함수를 사용하여 클릭한 버튼에 active-main, active-sub, show-sub 같은 class를 부여하여 클릭된 css를 적용한다.fetchGroups
함수를 사용하여 데이터를 요청하고, 응답받은 데이터를 search-list에 새롭게 렌더링해준다.기타