Skip to content

바닐라 타입스크립트를 이용하여 구현된 영화 자동 검색기 입니다.

Notifications You must be signed in to change notification settings

sonsurim/movie_auto-search

Repository files navigation

프로젝트 소개 💡

🎬 바닐라 자바스크립트를 이용하여 구현된 영화 자동 검색기 입니다.

프로젝트 실행 방법 🔧

npm install

npm start

기술 스택 🦾

  • TypeScript
  • Webpack
  • Babel
  • ES Lint
  • Prettier

주요 기능 및 페이지 소개 ⚙️

사이트 동작 화면 API 캐싱 화면
주요 기능
  • API 호출로 받은 영화 리스트 데이터 표시
  • 한번 받아온 API 데이터 캐싱 처리
  • 방향키 이동으로 아이템 선택 처리
  • 빈값인 경우, API 호출 방지
  • API 호출 debounce처리
  • Input clear 기능
  • Input blur 시, 리스트 닫기 기능

  • 디렉토리 구조 📂

    자세히 보기
    .
    ├── README.md
    ├── package-lock.json
    ├── package.json
    ├── public
    │   ├── Favicon.ico
    │   └── index.html
    ├── src
    │   ├── App.module.scss
    │   ├── App.ts
    │   ├── api
    │   │   ├── index.ts
    │   │   └── types.ts
    │   ├── assets
    │   │   ├── images
    │   │   │   ├── icon-close.svg
    │   │   │   ├── icon-search.svg
    │   │   │   └── image-logo.svg
    │   │   └── styles
    │   │       ├── index.scss
    │   │       └── variables.scss
    │   ├── components
    │   │   ├── base
    │   │   │   ├── Input
    │   │   │   │   ├── index.ts
    │   │   │   │   └── types.ts
    │   │   │   └── index.ts
    │   │   ├── core
    │   │   │   ├── Component.ts
    │   │   │   └── index.ts
    │   │   ├── domain
    │   │   │   ├── index.ts
    │   │   │   └── search
    │   │   │       ├── SearchInput
    │   │   │       │   ├── SearchInput.module.scss
    │   │   │       │   ├── index.ts
    │   │   │       │   └── types.ts
    │   │   │       ├── SearchResultList
    │   │   │       │   ├── SearchResult.module.scss
    │   │   │       │   ├── index.ts
    │   │   │       │   └── types.ts
    │   │   │       └── index.ts
    │   │   └── index.ts
    │   ├── data
    │   │   ├── constants
    │   │   │   ├── api.ts
    │   │   │   ├── images.ts
    │   │   │   └── index.ts
    │   │   └── models
    │   │       ├── declarations.d.ts
    │   │       ├── index.ts
    │   │       └── types.ts
    │   ├── main.ts
    │   ├── services
    │   │   ├── index.ts
    │   │   └── movie.ts
    │   └── utils
    │       ├── dom
    │       │   ├── index.ts
    │       │   └── types.ts
    │       ├── helpers
    │       │   ├── index.ts
    │       │   └── types.ts
    │       ├── index.ts
    │       └── storage
    │           └── index.ts
    ├── tsconfig.json
    ├── tsconfig.path.json
    └── webpack.config.js
    
    • /.github: 깃허브 관련 디렉토리

      • README.md 파일의 프로젝트 소개 이미지
    • /.api: API Request 관련 디렉토리

      • /index.ts: service에서 호출되는 API 함수
    • /.assets: 이미지, 스타일 관련 디렉토리

    • /components: App에서 사용되는 컴포넌트 관련 디렉토리

      • /core: 컴포넌트들의 기본 구조가 되는 컴포넌트
      • /base: domain에서 사용되는 최소 단위의 컴포넌트
      • /domain: 해당 도메인에서만 사용되는 컴포넌트
    • /data: 타입과 상수 관련 디렉토리

      • /constants: 프로젝트 전역에서 사용되는 상수
      • /models: 프로젝트 전역에서 사용되는 타입
    • /service: api 데이터를 가공하는 함수관련 디렉토리

    • /utils: 유틸함수 관련 디렉토리

    컴포넌트 구조 🛠

    • index.ts: types와 styled를 이용하여 구현한 컴포넌트
    • types.ts: 해당 컴포넌트의 type들이 정의되어 있는 컴포넌트

    Core 컴포넌트 Data Model ✅

    interface Component<StateType> {
      node: Element
      state: StateType
      preventRenderStateKey: Set<string>
      needRender: boolean
      needUpdate: boolean
      subscribers: Set<any>
    }
    

    Core 컴포넌트 구조 ⚙️

    • 컴포넌트 데이터
      • node: 컴포넌트의 node
      • initalState: 컴포넌트 상태의 초기값
      • preventRenderStateKey: 구독중인 컴포넌트의 상태 변경 시, 내부적으로 상태만 업데이트 후 자식 컴포넌트만 렌더링하기 위한 key
      • needRender: 컴포넌트의 상태 변경에 따른 렌더링 여부
      • needUpdate: 컴포넌트의 상태 변경에 따른 setState 여부
      • subscribers: 컴포넌트 상태 변경 시, 상태가 같이 변경될 하위 컴포넌트
    • 컴포넌트 메서드
      • template(): 컴포넌트의 markup을 반환하는 메서드
      • init(): 렌더링 전, 내부적으로 사용될 변수, 함수 정의 또는 초기 데이터를 받아올 때 사용되는 라이프사이클 메서드
      • fetch(): 초기 렌더링 이후 컴포넌트의 fetching이 필요할 때 실행되는 라이프 사이클 메서드
      • render(): 빈 태그를 컴포넌트의 markup으로 변환, 이벤트를 바인딩, 하위 컴포넌트를 부착을 하는 라이프 사이클 메서드
      • update(): 상태 변경 시, 렌더링을 위한 라이프사이클 메서드
      • updateChildren(): 상태 변경 시, 하위 컴포넌트의 렌더링을 위한 라이프 사이클 메서드
      • attachChildComponent(): 하위 컴포넌트를 상위 컴포넌트의 template과 연결하는 라이프 사이클 메서드
      • subscribe(): 상위 컴포넌트에 구독을 하는 메서드
      • validationState: 컴포넌트의 상태 변경 시, 현재 컴포넌트가 가지고 있는 상태인지 판별하는 메서드
      • setState(): 컴포넌트의 상태 변경 시, 컴포넌트의 상태를 업데이트, 하위 컴포넌트들에게 알리는 메서드
      • notify(): 상위 컴포넌트로부터 받은 새로운 상태로 하위 컴포넌트들의 setState(), render()하게 해주는 메소드
      • setEvent(): 컴포넌트의 node에 이벤트를 바인딩하는 라이프 사이클 메서드
      • clearEvent(): 컴포넌트의 node에 바인딩되어 있는 이벤트를 지우는 라이프 사이클 메서드

    About

    바닐라 타입스크립트를 이용하여 구현된 영화 자동 검색기 입니다.

    Topics

    Resources

    Stars

    Watchers

    Forks

    Releases

    No releases published

    Packages