1 minute read

Day18

컴포넌트 방식으로 생각하기

  • UI의 어떤 요소들을 Component 단위로 추상화하고 응집력있게 개발하는 방법

추상화1

추상화2

  • TodoList Component 만들기
    • main.js ```javascript const data = [ { text: ‘JavaScript 공부하기’ }, { text: ‘JavaScript 복습하기’ } ]

    const data1 = [ { text: ‘베이스 연습하기’ }, { text: ‘턱걸이 하기’ }, { text: ‘공부하기’ } ]

    const $app = document.querySelector(‘.app’) new TodoList({ $target: $app, initialState: data })

    new TodoList({ $target: $app, initialState: data1 })

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    - todolist.js
    ```javascript
    // params.$target = 해당 컴포넌트가 추가될 DOM 엘리먼트
    // params.initialState = 해당 컴포넌트의 초기 상태
      
    function TodoList({ $target, initialState }) {
        const $todoList = document.createElement('div');
        $target.appendChild($todoList);
      
        this.state = initialState;
      
        this.render = () => {
            $todoList.innerHTML =
            `
            <ul>
                ${this.state.map(({ text }) => `<li>${text}</li>`).join('')}
            </ul>
            `
        }
      
        this.render();
    }
    
  • TodoForm Component 만들기

    ❌ TodoForm 생성 파라미터에 TodoList를 넣고 직접 참조하면 TofoForm에 TodoList 컴포넌트의 의존성이 강하게 생기게 됨.

    ✅ TodoForm 생성 파라미터에 이벤트 콜백을 넣고, text를 입력받으면 해당 콜백을 통해 text를 넘겨줘야 한다.

    solution

  • main.js에서 하는 작업을 App.js로 분리
  • main.js에서는 component가 어디에 들어갈지 어떤 데이터가 들어갈지만 정의
  • app.js에서는 app 전체에서 어떤 component들이 들어갈지 관리하는 기능

    dependency

Client Side에서 데이터 저장하기

  • 쿠키는 브라우저에 저장되는 작은 문자열로 RFC 6265 명세에서 정의한 HTTP 프로토콜의 일부
  • 다른 저장 방법에 비해 가장 오래된 방식
  • 추가할 때 이전의 cookie를 덮어씌우지 않고 새로 추가된다.
  • 각 쿠키는 ;로 구분되어 있어서 split하여 써야 한다.
  • 쿠키는 브라우저를 닫는 순간 다 날아가버리기 때문에 유효기간을 넣어야 한다.(팝업창에서 하루 보지 않게, 일주일 보지 않기 등으로 많이 활용된다.)
  • expiresmax-age로 넣는 방법이 있다.
  • HTTP 요청시 헤더에 쿠키가 같이 나가기 때문에 쿠키 사이즈가 커지면 HTTP 요청 크키도 커진다.
  • 사이즈에 제한이 있다.
  • 보안에 취약하다.

Local Storage

  • key, value 기반으로 Local에 데이터를 저장할 수 있다.
  • 도메인 기반으로 Storage가 생성된다. 도메인이 같다면 여러 탭 내에서 같은 Storage가 공유된다.
  • 삭제하거나 Storage를 날리지 않는한 삭제되지 않는다.
  • 값을 저장하는 방법엔 3가지가 있다.
    • window.localStorage.name = 'roto'
    • window.localStorage['name'] = 'roto'
    • window.localStorage.setItem('name','roto')
  • 저장, 불러오기, 삭제하기, 전체 삭제하기
    • 저장 : localStorage.setItem('name','roto')
    • 불러오기 : localStorage.getItem('name')
    • 삭제하기 : localStorage.removeItem('name')
    • 전체 삭제 : localStorage.clear()
  • localStorage에는 string만 넣을 수 있기 때문에 JSON.stringify로 넣고 JSON.parse로 꺼낸 값을 파싱해서 쓰는 것이 좋다.

    localStorage_JSON

Categories:

Updated: