프라이D
프라이Develog(❁´◡`❁)
프라이D
전체 방문자
오늘
어제
  • ALL (378)
    • TDD, Cleancode with JavaScr.. (5)
    • 프로젝트 (32)
      • work (3)
      • 직접 만드는 기술 블로그 (2)
      • 데일리 옥션 (19)
      • 모락모락 (8)
    • Computer Science (1)
    • Algorithm & 자료구조 (94)
      • 알고리즘 w.JavaScript (53)
      • 자료구조 (5)
      • (인프런) 자바스크립트 알고리즘 문제풀이 (34)
    • JavaScript (45)
      • JavaScript (41)
      • 모던 자바스크립트 Deep Dive (4)
    • WEB (13)
    • 회고 (12)
    • TIL (109)
    • WIL (7)
    • Stacks (20)
      • React.js (6)
      • Next.js (1)
      • Redux (3)
      • Node.js (2)
      • GIT (2)
      • SAP (1)
    • 15일 메이킹 프로젝트 (15)
    • 이전 기록 (14)
    • ETC. (5)
    • ---------------2021 (6)
      • 내일배움단-웹개발 5주 (2)
      • 정보처리기사 (4)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • JavaScript
  • 코딩프로젝트
  • 알고리즘
  • 스파르타코딩클럽
  • 자바스크립트알고리즘
  • 2023 인프콘 후기
  • 자바스크립트비트마스크
  • nomadcoders
  • 국비지원
  • 코드스테이츠
  • 자바스크립트
  • vanilaJS
  • 비트마스크
  • 투포인터알고리즘
  • Til
  • 모던자바스크립트딥다이브
  • 내일배움단
  • nomadcoder
  • 내일배움카드
  • MySQL

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
프라이D

프라이Develog(❁´◡`❁)

[Day 35] 2022-0810
TIL

[Day 35] 2022-0810

2022. 8. 10. 23:41

🐈오늘 공부한 것

✔️styled-component

컴포넌트 주도 개발이 등장하기 이전에 HTML CSS JS 로 관심사를 분리하는게 대세였다면, 요즘은 컴포넌트 위주로 기능과 스타일까지도 한번에 개발하는 방법도 등장했다. 리액트에서 JSX 문법을 사용하면 기능과 화면을 한번에 개발할 수 있지만 CSS는 별도로 분리해야 하는데, styled-component 라이브러리를 사용하면 CSS IN JS 즉 자바스크립트(리액트) 코드 안에서 CSS 스타일이 적용된 엘리먼트나 컴포넌트를 만들어서 사용할 수 있다. 오늘 벨로퍼트님의 투두리스트 만들기 예제를 연습하면서 처음 보게된 개념인데, 처음에는 코드가 지저분하다고 생각해서 CSS 로 분리를 했다가 state에 따라서 다른 스타일을 보여줄 수 있는 부분이 있어서 연습겸 적용을 해보았다. 지금 따로 만들고 있는 투두 리스트를 styled-component 로 바꾸면서 연습해보려고한다. 

✔️Context API

이 개념도 오늘 처음 봤다. useReducer 라는 훅과 함께 상태관리를 도와주는 도구? 라고 할 수 있다. Redux라는 상태관리 라이브러리가 존재하긴 하지만, 리덕스가 조금 큰 규모에 적용된다면 Context API 는 조금 더 작은 규모에 적용할 수 있다고 한다. (참고) 상태관리가 필요한 이유를 정리하자면, 리액트의 데이터는 하향식 단방향 흐름을 갖고 있기 때문에 여러 컴포넌트가 하나의 state에 영향을 받는다면, 공통의 상위 컴포넌트-조상님께서 state를 관리해주고 props로 전달하는 방식을 사용해야한다. 그런데 이게 너무 많은 범위에 영향을 준다면 부모로부터 자식으로, 또 그 손주의 증손주까지 연결되어야 하는데 이런 방식은 딱 봐도 굉장히 비효율적이다. 그렇기 때문에 상태관리가 필요한 것이다. Context API 자체가 상태를 관리해주는 개념은 아니고, 여기에 state가 있다면 그에 관련된 내용들을 Provider로 제공하고, 그 state가 필요한 컴포넌트에서는 Consumer로 받아올 수 있다고 한다. 즉 컴포넌트의 전역 데이터를 Context에 저장한 뒤에 사용하는 것이라고 볼 수 있다. 링크를 참조하면 예제를 통한 실습으로 개념을 익힐 수 있다.

✔️useReducer Hook

이것도 투두 리스트 예제를 연습하면서 처음 본 개념이다. context API와 함께 상태를 관리해줄 수 있는 훅이라고 한다. 이 훅을 사용하면 state를 업데이트 하는 로직을 reducer 함수로 따로 분리할 수 있다. useReducer 훅에 상태를 업데이트 할 reducer 함수와 초기값을 전달해서 state를 등록할 수 있다. useReducer는 state와 dispatch를 반환하는데, dispatch에 객체를 넘겨주면 reducer 함수의 action으로 전달된다. reducer 함수에서 state와 action 값을 받아와서 action에 전달된 값에 따라 상태를 변경하는 로직을 실행한 뒤에 새롭게 업데이트 된 상태를 리턴한다. 오늘 사용해봤는데 연습이 조금 더 필요할 것 같고, Context API와 함께 사용해보니 뭔가 많이 어려웠다..! 

✔️flex-item의 grow 속성

오늘 예제를 보다보니 flex-item 에 해당하는 컴포넌트에 flex : 1 이라는 속성이 적용된 것을 발견했다. 복습 겸 다시 찾아보았는데 내가 제대로 몰랐던 부분이라 정리하려고 한다. display : flex 속성이 적용된 요소의 자식요소는 flex-item이 되고 이 item들은 flex라는 속성을 설정해줄 수 있다. 차례대로 flex-grow, shrink, basis 인데, flex:1 이라는 의미는 grow 값이 1 이라는 의미이다. 그리고 이 말은 flex item 이 차지할 수 있는 공간의 비율을 나타낸다. 만약 flex 공간 하나에 flex-item이 한 개 존재한다면 flex-grow가 1일 때 전체 공간을, item이 두 개 존재할 때는 각각 전체(1)의 0.5만큼의 공간을 가지게 되는 것이다. 

✔️투두 리스트 : localStorage 사용하기 

요즘 배운 것을 복습하면서 내 것으로 만들기 위해서 간단한 투두 리스트를 만들고 있다. 시작한지는 꽤 되었는데 여러가지 할 것이 많다보니 진도를 빨리 못나가고 있다.🥲

아무튼 오늘 목표는 입력된 투두 리스트 목록을 새로고침해도 볼 수 있도록 localStorage에 저장하는 것이었다! 처음에는 어떻게 접근을 해야할지 몰라서 살짝 막막했는데 (리액트 코드로 바뀌니까 약간 막막해졌다) todoList가 state에 등록되었고, 이 state에서 하나씩 화면에 뿌려주는 것이라면, todoList 자체를 localStorage에 등록하고, 초기값을 localStorage에서 조회되어 가져온 값으로 하면 될 것 같았다. 초기값을 로컬스토리지에서 불러올 때, 등록된 todoList가 없다면 undefined가 떠서 에러가 발생하는데, 이걸 방지하기 위해서 단축평가를 사용해 조회 결과가 undefined 일 경우에는 빈 배열이 할당되도록 했다. 단축평가를 스스로 활용한 것은 처음인 것 같다... 

function TodoContainer() {
  // localTodoList 불러오기 : localStorage에 저장된 내용이 없을 경우 빈 배열을 초기값으로 한다.
  const localTodoList = JSON.parse(localStorage.getItem('todoList')) || [];
  const [todoList, setTodoList] = useState(localTodoList);

  // 초기 마운트 될 때, todoList가 업데이트 될 때 로컬스토리지에 todoList 저장
  useEffect(() => {
    localStorage.setItem('todoList', JSON.stringify(todoList));
  }, [todoList]);

  return (
    <div className="todo__background">
      <div className="todo__container">
        <h1>To Do</h1>
        <TodoInput setTodoList={setTodoList} todoList={todoList} />
        <TodoItems todos={todoList} />
      </div>
    </div>
  );
}

🐈더 공부할 것

1. 투두 리스트 : 체크 박스 state 수정 / 삭제 기능 / 코드 최적화 !!! / styled-component 적용해보기

2. 리액트-타입스크립트 스터디 과제 : 코드 분리하여 별도 레포 만들기 / 숫자 야구 리팩터링 / SPA 제작

3. 리액트 Hook 추가공부 : useRef, useMemo, useCallback, useReducer ... 

🐈오늘의 느낀 점

1. 오늘 낮에 진행한 예제는 튜토리얼이 있어서 할만할 것이라고 생각했는데 오산이었다... 배워도 배워도 배울게 끝없이 나온다는 느낌을 받았다. 재미도 있었고 빨리 잘하고 싶다는 마음도 들었는데, 개념을 잘 모르니까 에러가 나도 어떻게 해결해야할지 막막한 것은 있었다. 처음에 styled-component 적용 안하고 익숙한 CSS로 했었는데, 좀 귀찮아도 생각을 고쳐먹고 새로운 것을 해보려고 노력해야겠다. 

 

2. 리액트-타입스크립트 스터디에서 다른 잘하시는 분들의 코드를 보고 엄청난 동기부여를 받았다...! 다른 할 것이 많아서 후딱하고 해치운다는 느낌으로(반성...) 과제를 해갔는데, 주말에 시간을 내어서 다 뜯어 고쳐볼 생각이다. ㅋㅋ 솔직히 이해 안되는 로직도 있고 해서 하나씩 뜯어보면서 다시 내걸로 만들어야겠당. 

저작자표시 (새창열림)

'TIL' 카테고리의 다른 글

[Day 37] 2022-0812  (0) 2022.08.13
[Day 36] 2022-0811  (0) 2022.08.11
[Day 34] 2022-0809  (0) 2022.08.09
[Day 33] 2022-0808  (0) 2022.08.08
[Day 32] 2022-0805  (0) 2022.08.08
    'TIL' 카테고리의 다른 글
    • [Day 37] 2022-0812
    • [Day 36] 2022-0811
    • [Day 34] 2022-0809
    • [Day 33] 2022-0808
    프라이D
    프라이D
    틀린내용 정정 및 개선사항은 언제든지 댓글 달아주세요 :D

    티스토리툴바