포트폴리오 관련 질문 - 오늘 본 상품
안녕하세요. 포트폴리오 작성 중 여러 방법을 시도해 보다 도저히 해결방법을 잘 모르겠어서 질문드립니다.
구현하고 싶은 것 : 오늘 본 상품 목록을 다른 페이지에서 구현 하는 것이 아닌 여러 페이지의 본문 영역 옆에 상시 뜨도록 설계 하는 것, 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" }} />
{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.
관련 오류가 뜹니다. 여러 방법을 시도해도 옳은 방법을 잘 모르겠어서 질문 남깁니다.
답변 1
2
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





