ABOUT ME

Today
Yesterday
Total
  • [js] mvc 패턴을 연습해보자 -3 탭(1)
    Javascript 2023. 7. 20. 11:35

    추천검색어와 최근 검색어가 있는 '탭'을 만들어보자.

    이번 페이지의 요구사항은

    ● 추천 검색어, 최근 검색어 탭이 검색폼 아래 위치한다

     

    index.html에 

    <div class="content">
    <div id="tab-view"></div>
    <div id="search-result-view"></div>

    <div id="tab-view"></div>

    추가해주고,

     

    TapView.js 파일을 만들고 초기 셋팅을 해준다.

     

    const TabType = {
    KEYWORD: 'KEYWORD',
    HISTORY: 'HISTORY'
    }

    const TabLabel = {
    [TabType.KEYWORD]: '추천 검색어',
    [TabType.HISTORY]: '최근 검색어',
    }

    탭타입과 탭라벨을 만들어주고,

     

    export default class TabView extends View {
    constructor() {
    super(qs("tab-view"));
    this.template = new Template()
    }

    show() {
    this.element.innerHTML = this.template.getTabList();

    super.show()
    }
    }

    super를 활용하여 index.html에 있는 <div id="tab-view"></div>

    이 것을 elements로써 활용해준다.

    (자세한건 View.js 파일에...)

     

    그 후 템플릿이라는 클래스를 새로 만들어주고,

    show메서드를 이용하여

    View.js 안에 있는 show 메서드로 오버라이딩 해준다.

     

    class Template {

    getTabList() {
    return `
    <ul class="tabs">
    ${Object.values(TabType)
    .map(tabType => ({ tabType, tabLabel: TabLabel[tabType]}))
    .map(this._getTab)
    .join('')
    }
    </ul>
    `
    }
     

    여기서 Object.values란

    특정 객체를 대상으로 value값만 뽑아서 배열로 반환하는 메서드이다.

    콘솔창에 찍으면 다음과 같은 결과가 도출된다.

     

    그 후 map을 돌려보겠다.

    그 후에 다시 map을 돌릴건데,

    그 전에 _getTab은 다음과 같다.

    _getTab({tabType, tabLabel}) {
    return `
    <li data-tab="${tabType}">
    ${tabLabel}
    </li>
    `
    }

    이를 활용해 map을 돌려주면,

    새로 생성된 객체 하나하나에 HTML코드를 생성할 수 있다.

     

    그렇게 하면,

    최종 결과물을 완성할 수 있고,

    ● 추천 검색어, 최근 검색어 탭이 검색폼 아래 위치한다

    요구사항을 충족시킬 수 있다.

     

     

    -참고 인프런 김정환 "만들고 비교하며 학습하는 리액트"

Designed by Tistory.