• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Next.js 게시판 useState로 컴포넌트 마운트 여부 확인 질문드립니다.

useState로 컴포넌트 마운트 여부 확인 질문드립니다.

  • 이 주제에는 4개 답변, 2명 참여가 있으며 김동우1 년 전에 전에 마지막으로 업데이트했습니다.
5 글 보임 - 1 에서 5 까지 (총 5 중에서)
  • 글쓴이
  • #126271

    김동우
    참가자
    안녕하십니까 센세
    next.js, styled componet 이용해서 개인 프로젝트 하고 있는데 
    client 컴포넌트에서 렌더링 될 때 html 먼저 렌더링되고
    대략 1초 후에 styled-component가 적용되더라구요.
    
    예를 들어서 
    const Box = styled.div`background :  black;`
    ...
    return <Box>테스트</Box>
    이런 모양의 컴포넌트에선 html에 그냥 div 박스가 먼저 렌더링 되고 
    뒤늦게 styled-component가 적용되는 형식입니다.
    
    html 로드와 css 로드 시간의 차이 문제라고 판단해서
    컴포넌트 마운트 여부를 판단하는 상태를 리턴하는 커스텀 훅을 만들어서 
    상태가 true면 컴포넌트 마운트가 완료됐으니까 기존 html 리턴하기, false면 로딩 컴포넌트 보여주기.
    이런 형식으로 하니까 어느정도 해결되긴 했습니다.
    문제는 이런식으로 플래그 상태를 사용하는게 권장되는 방식이 아니라고 하더라구요.
    
    useRef를 사용하면 마운트가 완료될때까지 화면이 비어서 그것도 사용자 경험에 좋진 않을 것 같더라구요.
    또 Ref는 리렌더링에 관여하지 않으니까 로딩 컴포넌트를 보여줄 수도 없구요.
    
    세줄요약 하자면
    1. styled-component 사용하니까 html 요소가 css 보다 먼저 화면에 보여서 ux와 performance에 하자가 생긴다.
    2. 그래서 컴포넌트 마운트 여부를 저장하는 플래그 상태를 리턴하는 커스텀 훅을 사용하니까 문제가 해결되긴했다.
    3. 근데 이런 식의 플래그 상태는 리액트에서 권장하는 방식이 아니며, 불필요한 리렌더링이 발생할 수 있다.
    
    문제를 본질적으로 해결하려면 어떻게 해야할까요?
     
    #126292

    codingapple
    키 마스터
    https://nextjs.org/docs/app/building-your-application/styling/css-in-js#styled-components
    처럼 next.config.js 파일이랑 registry.js 파일 설정해봅시다
    
    
    
    #126298

    김동우
    참가자
    와 해결됐네요 감사합니다 센세.
    근데 이런 문제 구글에 검색할때는 어떻게 해야하나요?
    #126321

    codingapple
    키 마스터
    nextjs styled components applied late 이런거 찾아보면 나올듯요
    #126382

    김동우
    참가자
    키워드 느낌으로 검색해야하네요. 항상 감사합니다 센세
5 글 보임 - 1 에서 5 까지 (총 5 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠