inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스

34-네트워크와 트러블 슈팅

포트폴리오 관련 질문 - 오늘 본 상품

해결된 질문

374

김무연

작성한 질문수 12

0

안녕하세요. 포트폴리오 작성 중 여러 방법을 시도해 보다 도저히 해결방법을 잘 모르겠어서 질문드립니다.
구현하고 싶은 것 : 오늘 본 상품 목록을 다른 페이지에서 구현 하는 것이 아닌 여러 페이지의 본문 영역 옆에 상시 뜨도록 설계 하는 것, recoil을 이용하지 않고 localStorage 를 이용하여 구현하는 것 입니다. 아래 사진은 현재 진행 과정 입니다.


아래는 현재 코드입니다

sidebar.tsx

import { useEffect, useState } from "react";
import * as S from "./sidebar.style";
import type { IUseditem } from "../../../../commons/types/generated/types";
import { LikeFilled } from "@ant-design/icons";
import { getPrice } from "../../../../commons/libraries/price";

export default function SideBar(): JSX.Element {
  const [items, setItems] = useState<IUseditem[]>([]);

  useEffect(() => {
    const storedItems = localStorage.getItem("todaylist");
    if (!storedItems) return;
    setItems(JSON.parse(storedItems));
  }, []);

  return (
    <S.SideBarWrapper>
      <S.SideBarTitle>오늘 본 상품</S.SideBarTitle>
      {items
        .filter((el) => el)
        .map((el) => (
          <S.SideBarContents key={el._id}>
            <S.SideBarP>
              <LikeFilled style={{ color: "#ffd903" }} />
              &nbsp;&nbsp;
              {el.pickedCount}
            </S.SideBarP>
            {el.images && (
              <S.SidaBarImg
                src={`https://storage.googleapis.com/${el.images[0]}`}
              />
            )}
            <S.SidebarDetail>
              <S.SideBarName>{el.name}</S.SideBarName>
              <S.SideBarRemarks>{el.remarks}</S.SideBarRemarks>
              <S.SideBarPrice>{getPrice(el.price)}</S.SideBarPrice>
            </S.SidebarDetail>
          </S.SideBarContents>
        ))}
    </S.SideBarWrapper>
  );
}

 

문제점

useEffect 부분에서 storedItems 가 업데이트 될 때마다, 리렌더링을 해주고 싶어, 종속성 배열에 items state를 넣으니
Warning: Maximum update depth exceeded. This can happen when a component calls setState inside useEffect, but useEffect either doesn't have a dependency array, or one of the dependencies changes on every render.
관련 오류가 뜹니다. 여러 방법을 시도해도 옳은 방법을 잘 모르겠어서 질문 남깁니다.

react node.js seo graphql next.js

답변 1

2

dev park

items 변경에 따라 setItems 를 처리하기 위해 useEffect 에 dependency를 추가하면 무한으로 업데이트 될 수 있기 때문에 위와 같은 경고가 발생한 것 같습니다.

useEffect 에서는 초기값 세팅만 해주고, 실제로 items 의 데이터가 업데이트 일어나는 이벤트에서 setItems 를 해주는게 적절한 방법같습니다.

위 코드로 짐작컨데, 오늘 본 상품에서 제외하는 액션이 있을 수 있을거 같고, 그 액션을 클릭 했을 때 filter 처리를 해주면 되겠네요.

fetchBoardsOfMine, fetchBoardsCountOfMine 에러 문의드립니다

0

40

1

댓글 기능 구현 중 질문드립니다.

0

66

1

쿠폰코드 발급

0

136

2

example 서버 플레이그라운드, API 접속 모두 안됩니다.

0

87

2

문의드립니다!! ㅠㅠ

0

102

2

graphql 백엔드 서버가 포폴용 빼곤 접속이 안됩니다.

0

77

2

_app.js 작성 이후로 에러가 발생하네요

0

95

2

학습자료

0

71

2

학습자료가 안열립니다.

0

50

2

플레이 그라운드 퀴즈 문제 질문이 있습니다.

0

61

0

기존강의 구매자, 업데이트 끝인가요?

0

110

3

업데이트 버전 수강

0

89

2

완벽한 프론트엔드

0

136

2

나만의 쇼핑몰 샘플 페이지 접속 확인부탁드립니다.

0

84

1

graphql 접속이 안됩니다.

0

101

2

const, let 사용 질문 드립니다.

0

70

2

싸이월드 만들기 1탄 피드백 부탁드립니다.

0

122

2

회원가입 과제 피드백 부탁드립니다.

0

81

2

styled.span / styled.input "CSS 자동완성"

0

47

1

쿠폰 발급 관련

0

167

2

서버 502 error

0

247

2

쿠폰 다시 부탁드려도 될가여?

0

140

2

a태그 패딩했을때 왜 크기가 줄어들지 않고 늘어나나요

0

185

2

2분 44초 질문

0

132

3