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

최근 댓글

최근 글

티스토리

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

프라이Develog(❁´◡`❁)

[TIL] 2023-1129
TIL

[TIL] 2023-1129

2023. 11. 30. 10:04

Facts

- QA 넘기고 코드 개선 작업 진행중... 흠...

- 디깅한 내용을 문서로 정리하는 중... 빠른 시일내에 블로그 글로 재탄생 시켜야지..!

 

Feelings

- 새 프로젝트가 시작되는데 기간이 아주 타이트함.. 하지만 재밌을 것 같다.. 하지만 일정이 제대로 갖춰질까..~?

 

Findings

1. CSS 선택자 꿀팁...  only-child 선택자를 사용하면 요소가 1개만 있을 때 속성을 제어할 수 있다.

아래는 2개 컬럼의 그리드에서 요소가 하나만 존재할 때 1개 컬럼으로 변경하는 코드..

display: grid;
grid-template-columns: repeat(2, 1fr);

/* 자식요소 하나만 있을 때 그리드 컬럼 1줄로 변경... */
& li:only-child {
  grid-column: 1 / -1;
}

 

grid item 에 grid-column 속성을 적용할 땐 이 아이템이 컬럼의 어디부터 어디까지 차지하게 할 것인지를 설정할 수 있는데, 위 코드에서 1 / -1 은 첫 라인 그리고 마지막 라인을 의미.. 즉 한 줄을 통째로 먹겐단 의미가 됨..

 

후 CSS의 세계란..

 

2. Next.js 에서 Suspense 적용하기...

Suspense 컴포넌트로 감싸서 로딩되는 동안 fallback UI를 띄워주고자 했으나... fallback UI가 의도대로 뜨지 않는 현상이 있음.. 왜지..? 그래서 디깅중...

 

[What is Suspense?]

  • React 18 부터 정식 릴리즈
  • 컴포넌트 렌더링을 어떤 작업이 끝날 때까지 잠시 중단, 다른 컴포넌트 먼저 렌더 가능. 
  • 그래서 비동기 데이터 fetching 이 끝난 후 렌더되도록 하는 일에 많이 쓰임
  • Suspense 를 사용하기 전, 함수형 컴포넌트에서는 useEffect 와 isLoading과 같은 상태값을 가지고 useEffect 내에서 isLoading의 상태를 변화시켜 JSX 코드를 렌더하는 방식으로 지연시킬 수 있음. 
  • 이런 방식의 문제점은..?
  • 이렇게 동작이 가능한 이유는 Suspense 가 promise를 캐치하기 때문이라고 함… 그러니까 Promise 의 작업이 완료되면 원래 UI를 렌더하고, 작업이 진행중인 경우 fallback UI를 렌더하면서 대기 상태에 놓이도록 할 수 있는 것.
  • 이 글 https://www.daleseo.com/react-suspense/#suspense-%EC%82%AC%EC%9A%A9-%ED%9B%84 과 https://codesandbox.io/p/sandbox/react-suspense-nupv27?file=%2Fsrc%2Fbefore%2FUser.jsx%3A25%2C32 여기 코드 예제를 보면 Suspense 유무에 따른 차이가 아주 잘 보인다..!

api 요청 waterfall 현상이 아래처럼 일어나면서 무한으로 반복되고 있다...

  • 적절한 Promise 응답을 받지 못해서.. 계속 이렇게 waterfall 현상이 발생하는게 아닌가 하는 의심이 드는군… 좀 더 디깅해보자..
  • Suspense가 감싸고 있는 하나의 컴포넌트에서 2개 이상의 요청을 할 때 네트워크 병목이 발생하는 것입니다. https://happysisyphe.tistory.com/54 이 글에 따르면… 한 컴포넌트에서 여러개 요청이 가고 있을 땐… Suspense 가 하나씩 settled 되면서 children을 반환하기 때문에 같은 요청이 여러번 가면서 이런 무한 요청 현상이 발생하는게 아닌가 싶은 합리적 의심이 든다. 
  • 그니까 한 컴포넌트에 대해 병렬처리가 되지 않고 children을 반환하면서 계속 렌더링이 되기 때문에… 이렇게 된다..? 그렇다면 useQuery를 사용하는 모든 컴포넌트에서 무한 렌더 현상이 발생해야 할 것 같은데 또 그렇지는 않단 말이지.. 하지만 이 suspense 의 waterfall 현상과 무한 요청이 깊은 연관이 있을 것 같다는 생각이 든다…
  • 여기에 suspense 의 동작에 대해 그림으로 잘 정리한 글이 있다. https://velog.io/@jay/suspense-useQueries
  • 이 문제를 해결하려면 여러 요청을 병렬로 처리할 수 있는 useQueries 훅을 suspense 와 함께 사용하면..
  • 흠 근데 그러기엔.. 이미 내 컴포넌트 동작 방식이 이렇다.
    • 상위 컴포넌트에서 useQuery 호출이 이루어짐
    • 하위 컴포넌트에서도 useQuery 호출이 이루어짐
  • 이렇게 중첩된 컴포넌트를 하나의 Suspense로 감싸고 있기 때문에 이런 문제가 발생하는건 아닐까..? => 실험 그럼 범위에 맞게 따로 감싸봅시다.. 여전히 waterfall이 발생하는군요…

Feedback

  • 일단 api 요청이 원하는 시점에 가도록 조절하고... 이건 어떻게 해결해야할지 suspense 동작을 공부하면서 찾아봐야겠다..람쥐..~
저작자표시 (새창열림)

'TIL' 카테고리의 다른 글

[TIL] 2023-1207  (0) 2023.12.07
[TIL] 2023-1206 크로스 브라우징 지원, 테스트 코드 작성 등등등...  (0) 2023.12.06
[TIL] 2023-1124  (0) 2023.11.26
[TIL] 2023-1123  (2) 2023.11.23
[TIL] 2023-1023 부상 주의 삐용삐용  (0) 2023.10.23
    'TIL' 카테고리의 다른 글
    • [TIL] 2023-1207
    • [TIL] 2023-1206 크로스 브라우징 지원, 테스트 코드 작성 등등등...
    • [TIL] 2023-1124
    • [TIL] 2023-1123
    프라이D
    프라이D
    틀린내용 정정 및 개선사항은 언제든지 댓글 달아주세요 :D

    티스토리툴바